如何使用LINQ逐列选择重复的记录?

时间:2014-01-13 07:08:05

标签: c# linq

由于某种原因,某些记录具有相同的ID。目标是列出具有相同ID的所有整个记录。例如,如何使用LINQ通过GroupId对以下记录进行分组,并查找具有相同ID的所有记录并将它们全部列出? (从而将每个组中的所有行合并为一个)

var list = new List<Record>()
{ 
    new Record() { GroupId = 0, ValueA = 20, ValueB = 300 },
    new Record() { GroupId = 1, ValueA = 30, ValueB = 700 },
    new Record() { GroupId = 1, ValueA = 40, ValueB = 500 },
    new Record() { GroupId = 2, ValueA = 80, ValueB = 300 },
    new Record() { GroupId = 2, ValueA = 20, ValueB = 200 },
    new Record() { GroupId = 2, ValueA = 20, ValueB = 200 }
};

期望结果是最后5条记录。

3 个答案:

答案 0 :(得分:2)

回答“如何使用LINQ将GroupId分组以下记录”

var groupList = list.GroupBy((mRecord) => mRecord.GroupId).ToList();

答案 1 :(得分:2)

另一种方式是:

var results = (from l in list
        group new {l.ValueA, l.ValueB} by l.GroupId
        into g
        select new {GroupId = g.Key, Values = g.ToList()}).ToList();

如果您更喜欢lambda表达式,那么

var results = (list.GroupBy(l => l.GroupId, l => new {l.ValueA, l.ValueB})
        .Select(g => new {GroupId = g.Key, Values = g.ToList()})).ToList();

这应该根据与其他相关值相关的唯一GroupId为您提供记录。

修改

foreach (var result in results)
{
    foreach (var value in result.Values)
    {
        int valueA = value.ValueA;
        int valueB = value.ValueB;
    }
}

我认为你正在寻找类似的东西。

希望它有所帮助。

答案 2 :(得分:1)

var groups = list.ToLookup(record => record.GroupId);
var groups1 = groups[1]; //all records with GroupId = 1