Linq 多列分组问题,是非常常见的需求。下面引用论坛某位坛友提出的问题:

班级 课程老师
A高一班英语小王
B高二班英语小王
C高一班英语小张

结果:

班级课程老师
A高一班英语小王
C高一班英语小张


经过分析可以看出,根据课程和老师进行分组,重复的取第一行的数据。传统的方法可能要写很多代码,而用Lambda或者Linq只需要几行代码就能实现。

完整代码如下:

namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){Data[]data=newData[]{newData(){班级="高一班",课程="英语",老师="小王"},newData(){班级="高二班",课程="英语",老师="小王"},newData(){班级="高一班",课程="英语",老师="小张"},newData(){班级="高一班",课程="英语",老师="小张"},};//方式1:LambdavarresultLambda=data.GroupBy(x=>new{课程=x.课程,老师=x.老师}).Select(x=>x.FirstOrDefault());resultLambda.ToList().ForEach(x=>Console.WriteLine(string.Join(",",x.班级,x.课程,x.老师)));//方式2:LinqvarresultLinq=frompindatagrouppbynew{p.课程,p.老师}intogselectnew{班级=g.FirstOrDefault().班级,课程=g.Key.课程,老师=g.Key.老师,};resultLinq.ToList().ForEach(x=>Console.WriteLine(string.Join(",",x.班级,x.课程,x.老师)));}}publicclassData{publicstring班级{get;set;}publicstring课程{get;set;}publicstring老师{get;set;}}}