使用Linq汇总列表的元素

时间:2014-03-31 13:15:16

标签: c# linq list

我有多个具有日期和值的元素列表。

firstList有(例如):

01/01/2013 , 100

02/01/2013 , 444

03/01/2013 , 357

.
.
.

其他列表包含更多日期和其他值

我在List<List<myElements>> myListOfLists;

中添加每个列表

现在,我该如何获得1个结果列表,其中包含每个日期的所有值的总和?

谢谢,

2 个答案:

答案 0 :(得分:2)

我认为myElement的定义如下:

public class Item
{
    public DateTime Date { get; set; }
    public double Amount {get; set; }
}

然后您的初始列表将是List<List<Item>>类型。如果您展平初始列表,可以在相同日期获取金额总和,如下所示:

List<Item> result = myListOfLists.SelectMany(x => x)
                                   .GroupBy(x => x.Date)
                                   .Select(grp => new Item
                                   { 
                                       Date = grp.Key, 
                                       Amount = grp.Sum(y => y.Amount)
                                   }).ToList();

Here是所提供解决方案测试的链接。

答案 1 :(得分:1)

您首先必须列表列入单个列表,然后分组日期,然后 sum 每个组。

你没有显示任何代码,但它应该是:

var result = yourListOfLists.SelectMany(x => x)
                            .GroupBy(x => x.TheDateProperty)
                            .Select(grp => new {key = grp.Key, 
                                                sum = grp.Sum(e => e.TheNumber)});