繁体   English   中英

使用Linq Lambda获取总数和总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM