前言
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()的第二个参数。