从列表中检索某些列的相同行

时间:2014-09-16 15:58:22

标签: c# list

我正在处理我自己定义的C# list类型,它有大约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: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

从上面的数据我想为每个相似的Code,Range, Unit and Type检索一行并将其另存为C# list 所以,我希望新列的四列如下

Code Range  Unit   Type  Repeated
LN  N15-U15 300     Put  4 times
LN  V14     380/400 Call 2 times

以上两行是唯一具有类似Code,Range, Unit and Type

的行

我正在尝试遍历列表并使用以下

进行检索
                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++;
                }

上面的代码显然效率不高,因为它一次只比较两行,并没有给我想要的结果。

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

1 个答案:

答案 0 :(得分:2)

Linq是你的朋友:

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()}

感谢迈克尔摩尔的纠正。