LINQ入门知识点有哪些
创始人
2024-12-24 14:22:05
0次

简 介

LINQ 是什么?引用官方术语“语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET work 3.5 版中引入的一项创新功能,它在对象领域和数据领域之间架起了一座桥梁。” 那么LINQ给我们带来了什么,请看以下例子:

问:有序列A=int[]{1,2,3,4,5,6,7,8,0}; B=int[]{2,4,7,8,9}。请求出包含A和B共同值的序列C。

如果按照原来的思路,那么编码也许如下:

说明:

List c = new List();foreach(int a in A){  foreach(int b in b) {    if (a==b) {      c.add(a);    }  }}

说明:

是不是觉得上面这段虽然没什么问题,但是很丑陋。如果我们引用LINQ来编写呢:

IEnumerable C = from a in A           from b in B           where a==b           select a;

语 法

  1. LINQ所处在的主要命名空间:System.Linq

  2. LINQ的处理的核心对象就是IEnumerable可枚举对象也包括了泛型枚举,换句话说当你要处理的对象为IEnumerable类型对象时即可使用LINQ操作它。且在没有经过其他处理的情况下将返回一个新的IEnumerable序列,注意LINQ有一个特性“延迟加载”这个将在后续说明。

3. 关键字(摘自MSDN):  

    from : 指定数据源和范围变量(类似于迭代变量)。

    where: 根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。

    select: 指定当执行查询时返回的序列中的元素将具有的类型和形式。

    group: 按照指定的键值对查询结果进行分组。

    into: 提供一个标识符,它可以充当对 join、group 或 select 子句的结果的引用。

    orderby: 基于元素类型的默认比较器按升序或降序对查询结果进行排序。

    join: 基于两个指定匹配条件之间的相等比较来联接两个数据源。

    let: 引入一个用于存储查询表达式中的子表达式结果的范围变量。

    in: join 子句中的上下文关键字。

    on: join 子句中的上下文关键字。

    equals: join 子句中的上下文关键字。

    by: group 子句中的上下文关键字。

    ascending:orderby 子句中的上下文关键字。

    descending:orderby 子句中的上下文关键字。

  4. 语法说明,每个LINQ语句都以from作为开头,以select作为结束,这点和T-SQL语法不通的切记先入为主的思考。其他关键字如where则类似T-SQL作为筛选判断条件。

样例:IEnumerable nums = from n in nums where .... orderby... select....

扩 展

从 .net 3.0 开始 MS 就给我们引进了其他一些新的特性,由于篇幅关系在这里给大家简单的介绍几个LINQ常用到的特性:

  1. 关键字 var :

    指示编译器根据初始化语句右侧的表达式推断变量的类型。 推断类型可以是内置类型、匿名类型、用户定义类型或 .NET Framework 类库中定义的类型。这样我们就可以在上述的LINQ表达式中 例如可简写为: var nums = from n in nums where .... orderby... select....

  2. 匿名类型:  

    匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。例如:var obj = new {A="a", B="b"}; 而LINQ则可以为 var nums = from obj in objs select new {obj.A, obj.B}

案 例

普通查询

var query = from num in num       select num.ProperyA

筛选查询

var query = from obj in objs      where obj.ProperyA > Condition      select obj

分组查询

var query = from obj in objs      group obj by obj.PropertyA into g      orderby g.Key      select g;

注意,在此示例里,关键字 into 不是必须的,使用 into 时,必须继续编写该查询,并最终用一个 select 语句或另一个 group 子句结束该查询。

内联查询

var query= from obj1 in objs1      join obj2 in objs2 on obj1.ID equals obj2.ID      select new { A= obj1.Property, B = obj2.Property };

左外联查询

var query = from obj1 in objs1      join obj2 in objs2 on obj1.ID equals obj2.Obj1ID into g      from subpet in g.DefaultIfEmpty()      select new { P1 = obj1.P1, P2 = (subpet == null ? null : subpet.P2 ) };

注意,此处涉及到.net 3.5 新特性静态扩展方法(后续介绍不影响理解)DefaultIfEmpty():如果序列为空,则返回一个具有默认值的单一实例集合

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...