[英]Getting a total count and sum using linq lambda
我有一个数据集,看起来像这样:
Code Fruit
A Apple
B Apple
C Orange
另一个看起来像这样:
Code Cost
A 5
B 10
C 3
如何将其转换为包含总计数和总和的列表?
要获得如下所示的列表:
Fruit Total Items Total Cost
Apple 2 15
Orange 1 3
这是我尝试过的方法,但它返回了重复的苹果列表。 如何更好地编写和完成呢?
var totals = list1.Select(a => new totalsObject
{
Fruit = a.Fruit,
TotalItems = list2
.Count(x => list1.Any(i => i.Code== x.Code && i.Fruit == a.Fruit)),
TotalCost = list2
.Where(x => list1.Any(i => i.Code== x.Code && i.Fruit == a.Fruit))
.Sum(x => x.Cost)
})
.OrderBy(x => x.Fruit )
.ToList();
您正在从list1
投影list2
。 这就是为什么要得到重复的原因。 相反,您应该加入两个列表,然后将它们分组:
var totals = list1
.Join(list2, x => x.Code, x => x.Code, (a, b) => new { a.Fruit, b.Cost })
.GroupBy(x => x.Fruit)
.Select(g => new
{
Fruit = g.Key,
TotalItems = g.Count(),
TotalCost = g.Sum(x => x.Cost)
})
.OrderBy(x => x.Fruit)
.ToList();
您可以加入群组
var query= from e2 in list2
join e1 in list1 on e1.Fruit equals e2.Fruit
group new{e1.Fruit, e2.Cost} by e1.Fruit into g
orderby g.Key
select new totalsObject
{
Fruit = g.Key,
TotalItems = g.Count(),
TotalCost= g.Sum(e=>e.Cost)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.