0

我有一个List<Fields>集合,其中类 Fields 具有以下属性

(Name, Currency, Amount, Date, OtherList)其中 OtherList 是一个列表

样本值

Name  Currency  Amount Date         F1    F2    F3  
ABC   XX        12     12 Jan 2013  X     Y     Z  
BCA   YY        11     12 Jan 2013  A     B     C  
ABC   XX        10     13 Jan 2013  X     Y     Z 

现在 OtherList 对象将具有et.el的(X, Y, Z)record1(A, B, C)record2

我需要做的是在名称、货币、F1、F2 和 F3 字段的上述列表上应用聚合,以便结果如下。

输出

Name  Currency  Amount Date         F1    F2    F3  
ABC   XX        22     13 Jan 2013  X     Y     Z  
BCA   YY        11     12 Jan 2013  A     B     C  

知道我该怎么做吗?

谢谢。

4

2 回答 2

2

您可以使用 LINQ:

var aggrList = list
    .GroupBy(x => new { x.Name, x.Currency, x.F1, x.F2, x.F3 })
    .Select(grp => new {
            Name = grp.First().Name,
            Currency = grp.First().Currency,
            Amount = grp.Sum(x=>x.Amount),
            Date = grp.Max(x=>x.Date),
            F1 = grp.First().F1,    
            F2 = grp.First().F2,    
            F3 = grp.First().F3,    
        });
于 2013-01-14T06:59:24.223 回答
0

尝试这样分组:

list.Where(x => x.OtherList != null && x.OtherList.Count >= 3 )
    .GroupBy(x => new {F1 = x.OtherList[0], F2 = x.OtherList[1], F3 = x.OtherList[2]})
    .Select(g => new
    {
        Name = g.First().Name,
        Currency = g.First().Currency,
        Amount = g.Sum(x => x.Amount),
        Date = g.Max(x => x.Date),
        F1 = g.Key.F1,
        F2 = g.Key.F2,
        F3 = g.Key.F3,
    });

我想Date你会Max()为 Amount - 应用函数,Sum()但你打算如何为NameCurrency字段应用聚合?

于 2013-01-14T06:58:27.483 回答