Linq 多列分組問題,是非常常見的需求。下面引用論壇某位壇友提出的問題:

班級 課程 老師
A 高一班 英語 小王
B 高二班 英語 小王
C 高一班 英語 小張
結(jié)果:
班級 課程 老師
A 高一班 英語 小王
C 高一班 英語 小張
經(jīng)過分析可以看出,根據(jù)課程和老師進行分組,重復(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; }
}
}創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。
當(dāng)前文章:Linq多列分組問題-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article40/diihho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計公司、商城網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、用戶體驗、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容