一.区别
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
24、ThenBy
25、ThenByDescending
使用指定的比较器按降序对序列中的元素执行后续排序。
26、ToList
从 IEnumerable<T> 创建一个 List<T>。
27、Union
28、Where
29、FromSql
30、Contains
查询条件为单个字段的的集合,查询list<id> id是否存在 id.contains(数据库。id)