查询操作的三个部分:

所有 LINQ 查询操作都由以下三个不同的操作组成:
1.获取数据源。
2.创建查询
3.执行查询


LINQ 笔记 - 语法与关键字    static void Main()
    }


这里的第二步仅仅是创建查询条件(一个匿名函数),查询条件里面是不包含查询结果的。
真正的执行是在第三步里,这个感念,被称为“延迟执行”。

要LINQ查询强制立即执行可以使用ToArrayToList方法。

LINQ 笔记 - 语法与关键字    var numQuery =
LINQ 笔记 - 语法与关键字        (from num 
in numbers
LINQ 笔记 - 语法与关键字         
where (num % 2== 0
LINQ 笔记 - 语法与关键字         select num).ToList
<int>();

如果要对数据源执行聚合函数的查询如:CountMaxAverageFirst ,也会导致此LINQ执行强制立即查询。



LINQ 的关键字:


form: 指定数据源和范围变量(类似于迭代变量)。
where:根据一个或多个由逻辑“与”和逻辑“或”运算符(&& 或 ||)分隔的布尔表达式筛选源元素。
select:指定当执行查询时返回的序列中的元素将具有的类型和形式。
group:按照指定的键值对查询结果进行分组。
into:提供一个标识符,它可以充当对 join、group 或 select 子句的结果的引用。
orderby:基于元素类型的默认比较器按升序或降序对查询结果进行排序。
join:基于两个指定匹配条件之间的相等比较来联接两个数据源。
let:引入一个用于存储查询表达式中的子表达式结果的范围变量。

  对于一个LINQ查询,form关键字是必然存在的,select或group关键字也是必然存在的,
因为它必须是以select关键字开头和以select或group关键字结尾。


FORM 子句:

form子句需要指定查询或子查询的数据源和一个本地范围变量。

最简单的就如上面代码:

LINQ 笔记 - 语法与关键字    var numQuery =
LINQ 笔记 - 语法与关键字        from num 
in numbers
LINQ 笔记 - 语法与关键字        select num;


在某些情况下,源序列中的每个元素本身可能是序列,也可能包含序列,这时就需要用到 复合 from 子句

LINQ 笔记 - 语法与关键字        public class Student
         }


复合 from 子句用于访问单个数据源中的内部集合。
不过,查询还可以包含多个可从独立数据源生成补充查询的 from 子句。

LINQ 笔记 - 语法与关键字        static void Main()



这段代码将会输出upperCase和lowerCase的笛卡尔乘积。


WHERE 子句:

where子句用于指定将在查询表达式中返回数据源中的哪些元素。

LINQ 笔记 - 语法与关键字
LINQ 笔记 - 语法与关键字        
static void Main()
*/


GROUP 子句

group子句返回一个 IGrouping(TKey, TElement) 对象序列,这些对象包含零个或更多个与该组的键值匹配的项。
也就是说,group子句出来的对象其实就是一个列表,

group子句由两个部分组成,group关键字之后的对象指名返回列表对象的类型,by关键字之后的是如果分组的条件。
分组条件的标识将会记录在返回对象列表的key属性中。

示例:
   
    }

LINQ 笔记 - 语法与关键字    static void Main()
*/


INTO 子句:

into 为上下文关键字创建一个临时标识符,以便将 groupjoin select 子句的结果存储到新的标识符中。
在 group 或 select 子句中使用新标识符的用法有时称为“延续”。

LINQ 笔记 - 语法与关键字    static void Main()


ORDERBY 子句:

orderby子句可使返回的序列或子序列(组)按升序或降序排序。
 
LINQ 笔记 - 语法与关键字    static void Main()


JOIN 子句:

join子句可以将来自不同源序列并且在对象模型中没有直接关系的元素相关联。
唯一的要求是每个源中的元素需要共享某个可以进行比较以判断是否相等的值。

JOIN 链接一般能分为3种:
  1.内部联接
  2.分组联接
  3.左外部联接




内部连接:
LINQ 笔记 - 语法与关键字    var innerJoinQuery =
LINQ 笔记 - 语法与关键字        from category 
in categories
LINQ 笔记 - 语法与关键字        join prod 
in products on category.ID equals prod.CategoryID   //这里 category.ID 与 prod.CategoryID 有关联
;


  这里出现了一个新的运算符: equals
  这个运算符是LINQ独有的,执行等同链接,equals 与 == 运算符之间的一个重要的区别。
  对于 equals,左键使用外部源序列,而右键使用内部源序列。外部源仅在 equals 的左侧位于范围内,
而内部源序列仅在其右侧位于范围内。


分组联接:
含有 into 表达式的 join 子句称为分组联接。
LINQ 笔记 - 语法与关键字    var innerGroupJoinQuery =
LINQ 笔记 - 语法与关键字        from category 
in categories
LINQ 笔记 - 语法与关键字        join prod 
in products on category.ID equals prod.CategoryID into prodGroup
;



左外部联接:
在左外部联接中,将返回左侧源序列中的所有元素,即使它们在右侧序列中没有匹配的元素也是如此。

LINQ 笔记 - 语法与关键字    var leftOuterJoinQuery =
LINQ 笔记 - 语法与关键字        from category 
in categories
LINQ 笔记 - 语法与关键字        join prod 
in products on category.ID equals prod.CategoryID into prodGroup
;


LET 子句:

在查询表达式中,let子句 存储子表达式的结果有时很有用,这样可以在随后的子句中使用。

LINQ 笔记 - 语法与关键字    string[] strings =
        select word;




相关文章:

  • 2022-12-23
  • 2021-12-27
  • 2021-11-16
  • 2021-12-08
  • 2021-07-20
  • 2021-12-03
  • 2022-01-13
  • 2022-12-23
猜你喜欢
  • 2021-12-04
  • 2021-05-31
  • 2022-12-23
  • 2021-11-26
  • 2021-11-14
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案