原文起始连接:https://dotnettutorials.net/course/linq/
说明:翻译接上篇,后面的内容基本是介绍Linq的操作符对应的方法,这部分如果有SQL编程基础的,部分内容将会很容易理解。有些地方我就简化,只提供原文中一些实例,不做过多翻译解释内容了。
LINQ中的排序操作符
排序操作对标SQL中的Order By
,LINQ中提供了一系列方法提供排序使用。类似与SQL,默认升序(即Order By
后面不加关键字的话,就默认ASC
排序)
- OrderBy 使用升序排序
- OrderByDescending 使用降序排序
- ThenBy 多个字段排序,从第二个开始使用ThenBy
- ThenByDescending 多个字段排序,从第二个开始使用ThenBy(逆序排列)
- Reverse 将序列倒叙
下面来一个综合例子展示几个方法的使用
1 | public class Student |
LINQ中的聚合操作
Aggregate聚合操作顾名思义是将序列按规则聚合成一个值,比如求和、求平均、求最大最下等。LINQ中提供以下方法实现聚合
- SUM
- MAX
- MIN
- Average
- Count
- Aggregate
前几个方法比较简单,类似于SQL中的聚合函数。下面举例展示用法
1 | List<int> intList = new List<int>{10,45,35,29,100,69,58,50}; |
重点看看Aggregate方法的签名
1 | public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func); |
举个例子看看用法
1 | string[] skills = { "C#.NET", "MVC", "WCF", "SQL", "LINQ", "ASP.NET" }; |
LINQ中的量化操作
量化操作用于检查数据源中是否部分或所有元素都满足一定条件。因此我们需要一个数据源,需要一个输入条件,返回bool值,表示数据源中的元素是否满足输入条件。LINQ中提供下面几个量化操作方法。
- All 是否所有元素满足给定条件
- Any 是否至少一个元素满足条件
- Contains 检查数据源是否包含某特定元素
下面例子展示如何使用这些方法
1 | string[] stringArray = { "James", "Sachin", "Sourav", "Pam", "Sara" }; |
LINQ中的分组
GroupBy
分组操作和SQL中的Group By语句一样,LINQ中提供GroupBy方法来实现,它返回IEnumerable<IGrouping<TKey,TSource>>
。参数中TSource表示集合中的元素,TKey表示分组使用的键。
1 | var GroupMS = Student.GetStudents.GroupBy(s=>s.Branch); |
如果需要使用多字段进行分组时,使用GroupBy方法。将多字段组织成一个匿名类对象,下面仍然使用上面的学生数据源,使用Branch和Gender两个字段进行分组。
1 | var groupMultipleKeysMS = Student.GetAllStudents() |
ToLookUp
ToLookUp和GroupBy实现的功能一样,都是用于分组。而两者的区别则是,GroupBy延迟执行,而ToLookup则是实时执行的。对比下面两个查询,groupMS查询使用的GroupBy分组,如果我们把.ToList()去掉,输出结果则得不到我们期望的。对于延迟加载的,可以通过调用.ToList()方法立即执行。
1 | var groupMS = Student.GetAllStudents().GroupBy(s => s.Gender) |
- 本文作者: 达文西
- 本文链接: https://edsiongithub.github.io/2022/03/30/32/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!