Linq中的Enumerable和Queryable内置方法和两个类的区别

一.区别

1、使用场合不同

Enumerable适合在内存数据集合中使用(如数组、List等),Queryable适合在离线数据集合中使用(如EF中的dbContext中的DbSet中使用)
这你不需要自己区分,因为当数组等内存集合使用linq查询时自动使用System.Linq.Enumerable下的方法,当EF的dbContext的DbSet使用linq查询时自动使用System.Linq.Queryable下的方法,
至于为什么呢?下面的不同点给出答案。

2、返回类型不同

上面说了VS会根据你使用的数据集合的类型来自动使用相应命名空间下的方法,这是因为VS选择了最优的使用。
当返回数据集合如Where方法时,Enumerable的Where返回的IEnumerable<>,Queryable的Where返回的是IQueryable<>,
这两个集合有什么区别呢?IEnumerable<>是本地集合存在内存中,而IQueryable<>属于离线集合,在使用到返回的集合IQueryable<>才加载数据,属于延迟加载

二.内置方法

1、All

确定序列中的所有元素是否都满足条件。

2、Any

确定序列是否包含任何元素。

3、Append

将一个值追加到序列末尾。

4、Average

计算序列的平均值。

5、Cast

将 IEnumerable 的元素强制转换为指定的类型。

6、Count

返回序列中的元素数量。

7、DefaultIfEmpty

返回指定序列中的元素;如果序列为空,则返回单一实例集合中的类型参数的默认值。

8、Distinct

通过使用默认的相等比较器对值进行比较,返回序列中的非重复元素。

9、First

返回序列中的第一个元素。

10、FirstOrDefault

返回序列中的第一个元素;如果序列中不包含任何元素,则返回默认值。

11、GroupBy

根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的函数对每个组的元素进行投影。

12、Intersect

通过使用默认的相等比较器对值进行比较,生成两个序列的交集。

13、Last

返回序列的最后一个元素。

14、LastOrDefault

返回序列中的最后一个元素;如果序列中不包含任何元素,则返回默认值。

15、Max

返回序列中的最大值。

16、Min

返回序列中的最小值。

17、OrderBy

根据键按升序对序列的元素进行排序

18、OrderByDescending

根据键按降序对序列的元素进行排序。

19、Select

通过合并元素的索引,将序列的每个元素投影到新窗体中。

20、Skip

跳过序列中指定数量的元素,然后返回剩余的元素。

21、SkipWhile

如果指定的条件为 true,则跳过序列中的元素,然后返回剩余的元素。

22、Sum

计算序列的总和。

22、Take

从序列的开头返回指定数量的相邻元素。

23、TakeWhile

只要指定的条件为 true,就会返回序列的元素。

24、ThenBy

根据某个键按升序对序列中的元素执行后续排序。

25、ThenByDescending

使用指定的比较器按降序对序列中的元素执行后续排序。

26、ToList

 从 IEnumerable<T> 创建一个 List<T>。

27、Union

通过使用默认的相等比较器,生成两个序列的并集。

28、Where

基于谓词筛选值序列。

29、FromSql

基于原始SQL查询创建LINQ查询。

30、Contains

查询条件为单个字段的的集合,查询list<id> id是否存在 id.contains(数据库。id)

 

posted @ 2022-05-18 17:17  猴猴手记  阅读(193)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end