C# SelectMany 的使用
2021-01-17 03:14
标签:OLE sel sql The 原型 排序 使用 操作 cores 刚开始学Linq的时候,学会使用Select就觉得很兴奋。等某天看到SelectMany时,就觉得非常很神奇了,这什么东西,怎样使用法啊。有时候,学习光靠看,是不能理解的,最好是看,理解和实践操作。 本文借鉴了https://www.xuebuyuan.com/851846.html 的文章,补充部分注释和实例。 首先看下面两个类的定义: 用以上两个类构建集合如下: 这里有7个老师,每个人有3个学生,总共21一个学生里又有3个倒霉蛋没考及格……我们想要获得这3个倒霉蛋的集合。C# 2.0的代码如下: 已经写了N多这样的二重foreach,写的都要吐了,简直恨不得做成代码段。 是不是感觉好多了,就跟写SQL一样顺畅。而且一目了然。也许习惯于OOXX的.NET程序员不那么喜欢SQL的语法,那还可以试试Lamda表达式的写法,这就必须Select大显身手的时候了。 如下官方解释: Projects each element of a sequence to an System.Collections.Generic.IEnumerable SelectMany 可以把一个集合中的元素投影到IEnumerable SelectMany把Teacher中的Student集合投注到IEnumeralbe 可以很方便的处理二重循环问题. 把鼠标放在SelectMany上面会显示如下注释,首先SelecMany会对每一个Teacher执行Func 把有的IEnumerable 这个用于IEnumerable 再举个例子,把所有学生的成绩按照从高到底排序出来; var scores = teachers.SelectMany((t, i) => t.Students.Select(s => s.Score)).OrderByDescending(t => t).ToList(); scores.ForEach(s => Console.WriteLine(s)); 第一眼看上去有点晕,重点是第一个Func委托的返回值IEnumerable 在这里,校长大人得到的集合,不仅包含了所有不及格的分数,同时还对应了该分数学生的教师姓名。 C# SelectMany 的使用 标签:OLE sel sql The 原型 排序 使用 操作 cores 原文地址:https://www.cnblogs.com/dusf/p/12205213.html class Student
{
public int Score { get; set; }
public Student(int score)
{
this.Score = score;
}
}
class Teacher
{
public string Name { get; set; }
public List
List
List
var list1 = from t in teachers
from s in t.Students
where s.Score
// flattens the resulting sequences into one sequence, and invokes a result
// selector function on each element therein. var list2 = teachers.SelectMany(t => t.Students).Where(s => s.Score
public static IEnumerable
原型如下:
public static IEnumerable
有时候我们需要输出更复杂的结果集,比如校长想知道教出这3个考不及格的倒霉蛋的,到底是哪几个更加倒霉的老师。那我们就要用到SelectMany的另一个重载方法了:public static IEnumerable
var list3 = teachers.SelectMany(
t => t.Students,
(t, s) => new { t.Name, s.Score })
.Where(n => n.Score
上一篇:C# 字符串切割——Split