Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义对象上的C#聚合_C#_Aggregation - Fatal编程技术网

自定义对象上的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等