首页 > Python基础教程 >
-
C#教程之C# Linq查询操作符简介
1.简介
.net的设计者在类库中定义了一系列的扩展方法来方便用户操作集合对象。
这些扩展方法构成了LINQ的查询操作符。
这一系列的扩展方法,比如:
Where,Max,Select,Sum,Any,Average,All,Concat等
都是针对IEnumerable的对象进行扩展的
也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法
2.实例
<1>
Where扩展方法,需要传入一个Func<int,bool>类型的泛型委托
这个泛型委托,需要一个int类型的输入参数和一个布尔类型的返回值
我们直接把a => { return a > 3; }这个lambda表达式传递给了Where方法
a就是int类型的输入参数,返回a是否大于3的结果。
<2>
Sum扩展方法计算了Where扩展方法返回的集合的和。
关于泛型委托,可以参考我的另一篇文章:《转》C# 委托基本介绍
3.用Linq查询表达式代替
上面的代码中,
arr.Where(a => { return a > 3; }).Sum();
这一句完全可以写成如下代码:
(from v in arr where v > 3 select v).Sum();
而且两句代码的执行细节是完全一样的。
第二句代码更符合语义,更容易读懂。
4. 查询操作符举例
4.1 All
public static bool All<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
参数:需要传递一个带有bool 返回类型的 Func委托
返回值: 返回true-当所有元素都pass, 或者返回false
例如:
4.2 Any
Any 不会返回任意一个source中的元素!
public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);
返回值: 返回true- 如果source包括任意一个元素, 或者返回false
例如:
public static bool Any<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
参数:需要传递一个带有bool 返回类型的 Func委托
返回值: 返回true-当其中任意一个元素满足条件, 都不满足则返回false
例如:
4.3 FirstOrDefault
public static TSource FirstOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
返回满足条件的第一个element, 或者返回default element 如果没有符合条件的element.
传递参数是一个返回bool型的Func委托
public static TSource FirstOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);
当source为空的时候返回默认值,反之返回第一个element。
4.4 Contains
public static bool Contains<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, TSource value);
如果source 包括value, 返回true, 反之返回false.
(看上去是不是很眼熟?)
4.5 ElementAt
public static TSource ElementAt<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, int index);
返回source序列中目标位置的元素
4.6 ElementAtOrDefault
public static TSource ElementAtOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, int index);
如果index超出范围,返回默认的source,反之返回目标source。
4.7 Max(此方法还有很多类似的不同参数类型的方法)
public static float Max<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,Single> selector);
返回最大值。
下面例子中的Single使用Int32代替。
public static TSource Max<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);
返回值:序列中最大的元素
如果TSource实现了Icomparable<T>, 这个Max<TSource>(IEnumerable<TSource>)会使用这个实现去比较value。
4.8 Min
Min
4.9 Sum
Sum
4.a Select
Select
4.b SelectMany
SelectMany
4.c Single
Single
4.d SingleOrDefault
SingleOrDefault
4.e Skip
Skip
4.f Take
Take
4.g TakeLast
TakeLast
4.h Concat
Concat