Lambda、Linq 多列分組問題
來源:程序員人生 發(fā)布時間:2014-10-04 08:00:00 閱讀次數(shù):3641次
Lambda、Linq 多列分組問題,是非常常見的需求。下面引用論壇某位壇友提出的問題:
班級 課程 老師
A 高一班 英語 小王
B 高二班 英語 小王
C 高一班 英語 小張
結(jié)果:
班級 課程 老師
A 高一班 英語 小王
C 高一班 英語 小張
經(jīng)過分析可以看出,根據(jù)課程和老師進(jìn)行分組,重復(fù)的取第一行的數(shù)據(jù)。傳統(tǒng)的方法可能要寫很多代碼,而用Lambda或者Linq只需要幾行代碼就能實現(xiàn)。
完整代碼如下:
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; }
}
}
運行結(jié)果:

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進(jìn)行捐贈