我正在处理我自己定义的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(),
});
我有更好的方法可以解决这个问题吗?
答案 0 :(得分:4)
我相信你在寻找:
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()
,因为您将所有字段都作为一部分
of Key。Enumerable.Sum
对每个组的音量求和。