国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > Lambda、Linq 多列分组问题

Lambda、Linq 多列分组问题

来源:程序员人生   发布时间:2014-10-04 08:00:00 阅读次数:3490次

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

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

结果:

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


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

完整代码如下:

namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Data[] data = new Data[] { new Data(){班级="高一班", 课程="英语", 老师="小王"}, new Data(){班级="高二班", 课程="英语", 老师="小王"}, new Data(){班级="高一班", 课程="英语", 老师="小张"}, new Data(){班级="高一班", 课程="英语", 老师="小张"}, }; //方式1:Lambda var resultLambda = data.GroupBy(x => new { 课程 = x.课程, 老师 = x.老师 }).Select(x => x.FirstOrDefault()); resultLambda.ToList().ForEach(x => Console.WriteLine(string.Join(",", x.班级, x.课程, x.老师))); //方式2:Linq var resultLinq = from p in data group p by new { p.课程, p.老师 } into g select new { 班级 = g.FirstOrDefault().班级, 课程 = g.Key.课程, 老师 = g.Key.老师, }; resultLinq.ToList().ForEach(x => Console.WriteLine(string.Join(",", x.班级, x.课程, x.老师))); } } public class Data { public string 班级 { get; set; } public string 课程 { get; set; } public string 老师 { get; set; } } }

运行结果:


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生