c# - Linq:对对象进行分组并从其子元素中删除重复元素

标签 c# linq grouping

所以我有这个类结构:

public class ObjectCode
{
    public string Code { get; set; }
}

class Configuration
{
    public int Id { get; set; }

    public string Name { get; set; }

    public IEnumerable<ObjectCode> Objects { get; set; }
}

我收到来自多个提供商的配置列表。我的问题是,我不知道如何按 Id 对这些对象进行分组,并将来自所有 Configuration 对象的不同 ObjectCode 对象放入结果实体中。

最佳答案

使用SelectManyGroupBy 中的每个组内:

var res = congigs
    .GroupBy(c => new {c.Id, c.Name})
    .Select(g =>
        new Configuration {
            Id = g.Key.Id
        ,   Name = g.Key.Name
        ,   Objects = g
               .SelectMany(c => c.Objects)
               .GroupBy(c => c.Code)
               .Select(gg => gg.First())
        }
    ).ToList();

上面假设具有相同 IdConfig 对象也具有相同的 Name

关于c# - Linq:对对象进行分组并从其子元素中删除重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096423/

相关文章:

c# - 网站和移动应用程序的成员(member)系统

c# - RhinoMocks - 获取被调用函数的参数

c# - 将具有另一个结构数组的结构从 C# 传递到 C (P/Invoke)

c# - LINQ to SQL .Join 语法

list - 根据列表中的值对列表元素进行分组

java - 如何在 Java 6 中等效于 Collectors.groupingBy?

c# - 有没有办法为遗留表单生成 *.Designer.cs 文件?

c# - 表达式 <Func<object, bool>> 作为属性

c# - 访问修改后的闭包警告是否对字符串变量有效?

项目编辑/更新后的 WPF Datagrid 更新分组