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(),
});
有更好的方法可以解决这个问题吗
我相信您正在寻找:
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
对每组的音量求和