F列表中每个相同的其他列在一列中的值的总和

本文关键字:一列 其他 列表 | 更新日期: 2023-09-27 18:22:02

我正在开发我自己定义的类型的C# list,它有大约6列和几行数据,我正在尝试检索其中有相同数据的三列的数据以及与类似数据关联的其他列的总和。

例如,我的C# list具有以下数据

Time    Code Range  Unit   Type   Price Volume 
8:13:43 LN  N15-U15 300     Put   0.1   250
8:13:53 LN  N15-U15 300     Put   0.1   50
8:14:01 LN  N15-U15 300     Put   0.099 100
8:14:08 LN  N15-U15 300     Put   0.099 50
8:16:49 LN  V14     380/400 Call  0.063 50
8:17:04 LN  V14     380/400 Call  0.001 50
8:18:43 LN  N15-U15 450     Call  0.125 50
8:34:00 LN  F15      500    Call  0.053 200

从上面的数据中,我想为每个类似的代码、范围、单位和类型以及所有类似列的体积总和检索一行,并将其存储在另一个C#列表中。因此,我希望四列的新列表如下

Code Range  Unit   Type  Volume
LN  N15-U15 300     Put   450 
LN  V14     380/400 Call  100

以上两行是唯一具有相似Code,Range, Unit and Type and Volume的行,是相似其他列的所有卷的总和

我能够成功检索类似的行,但无法获得卷的总和我有以下linq代码

var result = from row in listStructures
                         group row by new { row.Code, row.range, row.Unit, row.Type} into grp
                         let Item = grp.First()                        
                         select new { Code= Item.Code, Range= Item.Range, Unit= Item.unit, Type= Item.type};
            listMicroSummary = new List<StructuresDS>();
            listMicroSummary.Add(new StructuresDS
            {
                Code= result.Select(x=>x.Code).ToString(),
                Range=result.Select(x=>x.Range).ToString(),
                Unit= result.Select(x => x.Unit).ToString(),
                Type= result.Select(x => x.Type).ToString(),
            });

有更好的方法可以解决这个问题吗

F列表中每个相同的其他列在一列中的值的总和

我相信您正在寻找:

var query = listStructures.GroupBy(row => new {row.Code, row.range, row.Unit, row.Type} )
                     .Select(grp => new StructuresDS
                     {
                         Code = grp.Key.Code,
                         Range = grp.Key.Range,
                         Unit = grp.Key.Unit,
                         Type = grp.Key.Type,
                         Volumne = grp.Sum(r=> r.Volume)
                     });
listMicroSummary = query.ToList();// if you want a List
  • 您不需要grp.First(),因为您已经将所有字段作为一部分的密钥
  • 使用Enumerable.Sum对每组的音量求和