c# - 如何使用 LINQ 按组选择具有重复列的记录?

标签 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 条记录。

最佳答案

另一种方式是:

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;
    }
}

我认为您正在寻找与此类似的东西。

希望对您有所帮助。

关于c# - 如何使用 LINQ 按组选择具有重复列的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085669/

相关文章:

c# - 如何在 C# 中将 Dim order(4) 表示为 Int16?

c# - Kendo ui 下拉列表验证

c# - StringContent - 媒体类型参数

c# - 在 Entity Framework 上运行原始 SQL 查询的 KeyValuePair

c# - 如何使用 "Group by"LINQ?

.net - LINQ to EF - 模拟 SQL "IN"子句

c# - 在 Red Hat Linux 上使用带有 Mono 的 ODBC 时无法打开连接池错误

c# - 在 C# .NET 中通过服务帐户而不是个人帐户进行身份验证以使用 Google 表格

c# - someIEnumerable.Select 扩展方法的代码是什么?

c# - 查找名称为LINQ的最低价格返回的产品