我需要linq查询的帮助
我有一个包含名称,库存和其他字段的产品表。 可以有“重复”的产品名称,但“库存不同” 我需要3件事:
因此,例如,如果我有一个产品笔与库存1 然后是另一个同名“笔”但库存为3的产品
然后我的选择必须给我一行,名称为“pen”,库存为“4”
我曾经有这样的查询:
var result = (from c in Products
where c.Inventory != 0
select new[] {
Convert.ToString(i++),
c.Name,
c.Family,
c.Inventory});
它有效,但现在我需要添加“分组依据”产品名称,并将每个产品的库存总和相同,但我不知道如何
答案 0 :(得分:1)
我会用基于sintax的方法编写,因为不习惯基于查询:
var result = products.GroupBy(p=>new {p.Name,p.Family},(key,g)=>new {
key.Name,
key.Family,
Inventory=g.Sum(x=>x.Inventory)
}).ToArray();
注意我在分组键中包含Name和Family,因为您的结果都需要。
答案 1 :(得分:1)
如果我理解你的问题,你看起来像这样:
var result = (from c in Products
where c.Inventory != 0
group c by new{c.Name,c.Family} into g
select new {g.Key.Name, g.Key.Family, Inventory=g.Sum(e=>e.Inventory)}).ToArray();
您可以在此msdn page中找到有关如何使用group
子句的详细信息。
如果您想在投影中添加另一个字段而不考虑哪个值(就像您在评论中描述的那样),则可以使用First
扩展方法:
new {g.Key.Name,
g.Key.Family,
Country=g.First().Country,
Inventory=g.Sum(e=>e.Inventory)}