C# Linq之Lambda表達式GroupBy()的兩種用法


前言

GroupBy通常用於分組統計,可根據單字段或某些字段區進行合並統計數據
Lambda的思想與SQL語句類型,如以下例子:
統計和B、C、D同組的數量

用法1

List<Order> Orders= samples.GroupBy(p => new { p.B, p.C, p.D})  //D,B,C是samples的屬性
                 .Select(p => new Order
                 {
                     B= p.Key.B,
                     C= p.Key.C,
                     D= p.Key.D,
                     Qty = p.Sum(a => a.Qty),
                     A= p.Select(a => a.A).FirstOrDefault().ToString()
                 }).ToList();

說明:根據單個字段合並的時候details.GroupBy(p=>p.B),多個字段合並的時候是details.GroupBy(p=>new{p.B,d.C})

Select(p => new samples{
					D=p.Key.D,
					A=p.Select(a=>a.A).FirstOrDefault().ToString(),
					Qty=p.sum(a=>a.Qty)
				})

說明:
(1).如果在GroupBy()中存在的字段就直接p.Key.字段

(2).合並求和 Qty=p.sum(a=>a.Qty) 此處的a代指的是samples中特征相同但未合並的項,p指的是合並后的項

(3)GroupBy中沒有的項可通過A= p.Select(a => a.A).FirstOrDefault().ToString()

用法2

上述代碼可寫成下面的模式:

List<Order> Orders= samples.GroupBy(p => new { p.B, p.C, p.D}, p => p.Qty, (key, g) => new Order
                  {
                        H= Key.B,
                     	D= Key.C,
                     	C= Key.D,
                     	Qty = g.Sum(),
                     	A= p.Select(a => a.A).FirstOrDefault().ToString()
                     }).ToList();

說明:(key,g)中的 key是GroupBy()的第一個參數,g就是GroupBy()的第二個參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM