LINQ技术实际包括LINQ(对象操作)、DLINQ((数据操作)、XLINQ(Xml操作)三种技术
 
1.LINQ要解决的问题
长期以来,开发社区形成以下格局:
面向对象与数据访问两个领域长期分裂,各自为政
编程语言中的数据类型与数据库中的数据类型形成两套体系。例如:
C# 中字符串用 string 表示
SQL 中字符串用 NVarchar/Varchar/Char 表示
SQL 编码体验落后
没有智能感应
没有严格意义上的强类型和类型检查
SQL 和 XML 都有各自的查询语言,而对象没有自己的查询语言
2.LINQ(Language Integrated Query)即语言集成查询

LINQ 是一组语言特性和API,使得你可以使用统一的方式编写各种查询。查询的对象包括XML、对象集合、SQL Server 数据库等等。
LINQ 主要包含以下三部分:
1.LINQ to Objects 主要负责对象的查询(是指直接对任意IEnumerable集合使用LINQ查询,无需使用中间LINQ程序或API。其他都是需要使用中间LINQ程序或API,详细案例可以看 第30章 资料

LINQ To Object 提供的是内存中集合数据的实体映射.

其用法见我的博客  http://blog.csdn.net/goodshot/article/details/8922719)

2.LINQ to XML 主要负责 XML 的查询(其用法见我的博客 http://blog.csdn.net/GoodShot/article/details/8919595)
3.LINQ to ADO.NET 主要负责数据库的查询
1)LINQ to SQL(轻量级的ORM模型,诟病很多,微软尽管没放弃,但大家都言会淘汰)
2)LINQ to DataSet(其用法见我的博客 http://blog.csdn.net/goodshot/article/details/8922596)
3)LINQ to Entities(重量级的ORM模型?)

 
3.*** to  A ,基本是都是指最终LINQ都支持对他们的查询,在查询语句方式中即是指在关键词"in"后面的数据源是A的相应对象
4.事实上,LINQ查询存在以下两种形式
1)Method Syntax, 查询方法方式
主要利用 System.Linq.Enumerable 类中定义的扩展方法和Lambda表达式方式进行查询
上一章的例子都是以这种方式查询
2)Query Syntax, 查询语句方式
一种更接近 SQL 语法的查询方式
可读性更好

5.查询语句与查询方法存在着紧密的关系
CLR本身并不理解查询语句,它只理解查询方法
编译器负责在编译时将查询语句翻译为查询方法
大部分查询方法都有对应的查询语句形式:如 Select() 对应select 、 OrderBy() 对应 orderby
部分查询方法目前在C#中还没有对应的查询语句:如 Count()和Max() 这时只能采用以下替代方案
查询方法
查询语句 + 查询方法的混合方式;
一般情况下,建议使用可读性更好的查询语句
例1:
int count = (from p in foxRiver8
             where p.Age <= 30
             select p).Count();
等同
int count = foxRiver8
.Where(p => p.Age <= 30)
.Count();

 
例2:
int maxAge = (from p in foxRiver8
select p.Age).Max();

等同
int maxAge = foxRiver8
.Select(p => p.Age)
.Max();
 
例3:
int maxAge = (from p in foxRiver8
select p.Age).Min();
等同
int maxAge = foxRiver8
    .Select(p => p.Age)
.Min();
 
例4:
doubleaverageAge = (from p in foxRiver8
select p.Age).Average();
等同
doubleaverageAge = foxRiver8
.Select(p => p.Age)
.Average();
 
例5:
IntsumAge = (from p in foxRiver8
select p.Age).Sum();

等同
intsumAge = foxRiver8
.Select(p => p.Age)
.Sum();
例6:
var q = foxRiver8
.OrderBy(p => p.FirstName)
    .ThenBy(p => p.LasName)
    .ThenBy(p => p.Age);

等同
var q = from p in foxRiver8
        orderby p.FirstName, p.LasName, p.Age
        select p;

 
6.LINQ查询语句的理解,以下面程序为例
List<Person> foxRiver8 = GetFoxRiver8();
var q = from p in foxRiver8
        where p.Age <= 30 && p.FirstName.Length == 7
        orderby p.Age descending
        select new{
            Name = p.FirstName + " " + p.LasName,
            Age = p.Age};
       
foreach (var item in q)
{
Console.WriteLine(item.Name + " " + item.Age);
}
最终linq语句(from ...in where...orederby...select)返回结果是这么解释的:从foxRiver8 中(以遍历的方式)取出一个对象(Person),赋值给p(姑且认为是“赋值”,p的类型编译器自动判断),以p作为依据,使用其属性通过where筛选出所有符合条件的对象(即先运行from..in... where...),然后以这些对象为基础,按照select语句中的形式组成一组新的对象集合(每个对象均是由Name和Age两个属性(?or字段?)组成,然后再按照orderby提供的排序标准,进行排序,最后,将排序后的最终集合,赋给q(则q是以foxRiver8中的符合条件的对象为基础,构成的一个新的集合(其实现了IEnumerable接口))
 
 
 
7.查询分为以下三步:获取数据源、定义查询、执行查询;
定义查询后,查询直到需要枚举结果时才被真正执行,这种方式称为“延迟执行(deferred execution)”;
当查询方法返回单一值时,查询立即执行;
因此,可以通过以下技巧在定义查询时就强制执行查询;
var even = numbers
    .Where(p => p % 2 == 0)
    .Select(p =>
    {
        Console.WriteLine("Hi! " + p.ToString());
        return p;
    }).Count();

8.

LINQ以from开始,结束于select或group子句
9.

§Lambda表达式的格式为:
(参数列表)=>表达式或语句块
§可以有多个参数、一个参数、无参数,参数类型可以是显式或者隐式。
例如:
§ (x,y)=>x*y  //多参数,隐式参数=>表达式
§ x=>x*10     //单参数,隐式参数=>表达式
§ x=>{return x*10} //单参数,隐式参数=>语句块
§ ()=>Console.WriteLine(); //无参数,语句块

解释:
§Lambda表达式的参数类型可以省略,因为可以根据使用上下文进行推断。
§Lambda表达式的主体(Body)可以是表达式,也可以是语句块。
§Lambda表达式传入的实参将参与类型推断,以及方式重载辨析。
§Lambda表达式的表达式和表达式体可以被转换成表达式树。

LINQ学习中需要明确的几点问题相关推荐

  1. Linq 学习笔记(二)

    Linq 学习笔记(二) 下面就来介绍一些查询的示例: 1.Linq查询 var racers = from r in Formula1.GetChampions() where r.Wins > ...

  2. LINQ学习之旅——准备(C#3.0新特性补充)

    今天主要是对上一节所说的C#3.0的新特性做些补充:对象及集合初始化表达式.匿名类型.局部方法以及查询表达式.这些特性在LINQ中使用也很频繁,尤其是查询表达式. 1.对象初始化表达式允许开发者在一条 ...

  3. 最佳ASP.net之LINQ学习资料

    在使用LINQ过程中偶然有点心得想记录下来,没想到查阅到一个非常好的网站,直接转载了. 1. [推荐]LINQ系列文章,适合按部就班学习或查阅 http://kb.cnblogs.com/page/4 ...

  4. 一起谈.NET技术,Linq学习笔记

    写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...

  5. LINQ学习之旅——最后一站LTX之基础和编程接口所包含类的简介

    对LINQ TO SQL的内容讲解将告一段落,下面我们进入LINQ学习之旅的最后一站"LTX",即LINQ TO XML.当前XML技术在应用开发中显得越来越重要,已成为各类数据交 ...

  6. 深度学习中的一些英文解释

    A: (1)anchors:锚点.(anchors(锚点)定义在RPN网络中) B: (1)bounding box:预测边界框. (2)Botton-up 3D proposal generatio ...

  7. 深度学习中的优化算法之MBGD

    之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...

  8. 深度学习中的优化算法之BGD

    之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...

  9. 深度学习中的优化简介

    深度学习算法在许多情况下都涉及到优化. 1. 学习和纯优化有什么不同 在大多数机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的.因此,我们只是间接地优化P.我们系统通过降低代 ...

最新文章

  1. Python中的find()
  2. Hibernate的数据查找,添加!
  3. checkbox的相关知识点
  4. 字典占内存大吗_微博热搜稳占第一!「美团大数据杀熟」是真的吗?
  5. 母版页 中 html 乱码,Thymeleaf使用技巧:使用片段(fragment)实现母版页(Layout)功能...
  6. Apollo 2.0发布前 试乘百度L3、L4级自动驾驶汽车
  7. Chrome英文版离线安装包下载
  8. java虚拟机规范 51cto_java虚拟机
  9. 小程序 wxml selectable_微信小程序 抽象节点
  10. Oracle忽略hint的几种情形
  11. 使用ansible远程管理集群
  12. 注塑模设计必懂的知识
  13. 输入一个字符,判断该字符是大写英文字符,小写英文字符,空格,还是其他字符
  14. 用Changedetection监控网页的变化
  15. 云平台运维的一些心得
  16. 派森编程python_Python(派森)
  17. DS18B20温度采集报警系统,原理及汇编、C语言实现
  18. 破物联网大数据难题,百度天工物联网平台上线时序数据库服务
  19. kwgt 歌词_kwgt桌面插件美化下载-Eight for kwgt专业版主题包v3.9.136.1 最新版-腾飞网...
  20. 【嵌入式烧录/刷写文件】-3.1-详解二进制Bin格式文件

热门文章

  1. 将任意图像转成 HTML5 Canvas
  2. Hibernate注释大全
  3. CentOS上快速安装Oracle服务器脚本
  4. MySQL面试 - 读写分离
  5. 一入前端深似海,从此红尘是路人系列第七弹之孤独的剑客-单例模式
  6. 【css】响应式布局 @media媒介 适配平板手机
  7. 如何持之以恒做好一件事?
  8. Windows10上安装Kali并设置apt源
  9. 感谢相信你鼓励你的人
  10. gui编写线性调频信号_是的,我编写了信号量,不,我不是OS开发人员。