自定义对象上的C#聚合
我有一个自定义对象上的C#聚合,c#,aggregation,C#,Aggregation,我有一个列表集合,其中类字段具有以下属性 (姓名、货币、金额、日期、其他列表)其中其他列表是一个列表 样本值 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
列表
集合,其中类字段具有以下属性
(姓名、货币、金额、日期、其他列表)
其中其他列表是一个列表
样本值
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
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
现在,OtherList对象将具有记录1的(X,Y,Z)
值和记录2的(A,B,C)
值
我需要做的是在上面的列表中的字段Name、Currency、F1、F2和F3上应用一个聚合,结果如下所示
输出
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
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
你知道我该怎么做吗
谢谢。试着这样分组:
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()
,但是您计划如何为Name
和Currency
字段应用聚合?您可以使用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,
});
对不起,otherList不是一个列表,而是一本字典。我需要根据字典中的值进行分组。此外,上述解决方案似乎不起作用,因为我只能在GroupBy子句中使用x.Name、x.Currency和x.OtherList,而不能使用x.F1、x.F2。原因是x.OtherList是公开的属性,而不是x.F1等