IQueryable详解
IQueryable是什么
- 如果你经常用linq表达式,相信你可能会很好理解IQueryable,它继承了IEnumable接口,也就是继承了IQueryable的对象都是可被被遍历的集合,Query译为查询,也就是可查询的集合,Queryable提供了一些方法方便使用者查询集合中的元素并返回,没错,linq就是这么来的,不过linq使用的是IEnumable中的方法,两者基本相同,所以也不用太在意用法上的差异。
Queryable的参数
- 除了常见的类型,IQueryable会传入Expression<Func<TSource, bool>>类型的参数,也就是我们的lamdba表达式,Func是委托类型,可以限定lamdba表达式传入的值和返回的值,而Expression则是表达式树类型,可以接收一个lamdba表达式,并使用Compile方法编译回表达式。那为什么不直接传一个Func类型的对象呢,其实Expression可以看作是代码片段,代表了一段逻辑,可以被编译成其他类型的语言,比如SQL,这样就使数据库操作更加方便
IQueryable的方法汇总
常用方法
-
Contains:检测集合元素是否包含某个元素,类似于SQL的like %xxx%
-
Where:接收一个传入集合对象返回bool类型的表达式,返回使bool值为true的元素
-
Select:接受一个传入集合对象返回泛型对象的表达式,
其余方法
-
Aggregate,为集合的元素应用一个累加器,你可以指定累加器的实现。
-
All,判断是否集合中所有元素都满足给定的条件。
-
Any,判断是否集合中存在一个元素满足给定条件或者是否存在元素。
-
Append,在集合的尾部添加元素。
-
AsQueryable,将一个IEnumerable转化为IQueryable(对应的实现类型为EnumerableQuery)。
-
Average,计算一个数值集合的平均值。
-
Cast,将集合中的元素转化为指定的类型。
-
Concat,连接两个集合。
-
Count,计算集合中元素的数量。
-
DefaultIfEmpty,获取集合,但如果集合是空的话返回包含一个默认元素的集合。
-
Distinct,返回元素均为唯一的集合。
-
ElementAt,获取指定索引(Index)处的元素。
-
ElementAtOrDefault,获取指定索引(Index)处的元素,若元素为空则返回默认值。
-
Except,获取排除指定元素后的集合。
-
First,获取集合中的第一个元素。
-
FirstOrDefault,获取集合中的第一个元素,若为空则返回默认值。
-
GroupBy,使用指定的条件对集合进行分组,使用指定方式构建新元素并返回新的集合。
-
GroupJoin,分组与关联两个存在“主外键”关系的集合。
-
Intersect,对比指定集合获取交叉项,可指定交叉项的对比方法。
-
Join,使用匹配的键值关联指定的集合。
-
Last,获取集合中的最后一个元素
-
LastOrDefault,获取集合中的最后一个元素,若为空则返回默认值。
-
LongCount,以Int64来返回集合中元素的数量。
-
Max,获取指定属性值为最大的元素。
-
Min,获取指定属性值为最小的元素。
-
OfType,使用指定的类型过滤集合中的元素。
-
OrderBy,对集合进行升序排序,可以指定排序的属性。
-
OrderByDescending,对集合进行降序排序,可以指定排序的属性。
-
Prepend,在集合的头部添加元素。
-
Reverse,翻转集合顺序。
-
SelectMany,若集合中的元素存在子集合,则可通过该方法将这些属性“选择”出来并生成一个新的集合。
-
SequenceEqual,判断是否与指定的集合相同。
-
Single,获取集合中唯一一个元素,若集合元素为空或超过一个将抛出异常。
-
SingleOrDefault,获取结合中唯一一个元素,若集合元素为空或超过一个则获取默认值。
-
Skip,跳过指定数量的元素,并返回剩余元素的集合。
-
SkipLast,从尾部开始跳过指定数量元素,并返回剩余元素集合。
-
SkipWhile,跳过指定条件的元素,并返回剩余元素集合。
-
Sum,计算集合中指定属性值得总和。
-
Take,从头部开始获取指定个数的元素。
-
TakeLast,从尾部开始获取指定个数的元素。
-
TakeWhile,获取满足指定条件的元素的集合。
-
ThenBy,以升序对集合进行二次排序。
-
ThenByDescending,以降序对集合进行二次排序。
-
Union,合并两个集合。
-
Zip,使用指定的方式结合两个集合。