C# 从列表中检索某些列的相同行
我正在处理一个我自己定义的C类型的列表,它有大约7列和几行数据,我正在尝试检索三列中的数据,其中有相同的数据 例如,我的C列表有以下数据C# 从列表中检索某些列的相同行,c#,list,C#,List,我正在处理一个我自己定义的C类型的列表,它有大约7列和几行数据,我正在尝试检索三列中的数据,其中有相同的数据 例如,我的C列表有以下数据 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:
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 Repeated
LN N15-U15 300 Put 4 times
LN V14 380/400 Call 2 times
以上两行是唯一代码、范围、单位和类型相似的行
我正在尝试循环浏览列表并使用以下命令检索
int i=1;
foreach (var row in listStructures)
{
if (listStructures[i - 1].Code == listStructures[i].Code
&& listStructures[i - 1].Range== listStructures[i].Range
&& listStructures[i - 1].Unit== listStructures[i].Unit
&& listStructures[i - 1].Type== listStructures[i].Type)
{
//perform operations on the list
}
i++;
}
上面的代码显然效率不高,因为它一次只比较两行,并没有给出所需的结果
有没有更好的办法解决这个问题?林克是你的朋友:
var result = from row in listStructures
group row by new {row.Code, row.Range, Row.Unit, Row.Type} into grp
let Item = grp.Key
select new {Code=Item.Code, Range=Item.Range, Unit=Item.Unit, Type=Item.Type, Repeated=grp.Count()}
感谢michael moore的更正。为什么要先使用let Item=grp.First而不是grp.Key。。。。直接地从listStructures中的行按新的{row.Code,row.Range,row.Unit,row.Type}将行分组到grp中,选择新的{Code=grp.Key.Code,Range=grp.Key.Range,…Repeated=grp.Count}