前言
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()的第二個參數。