Linq:将对象分组并从子元素中删除重复元素

时间:2017-02-07 17:40:22

标签: 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; }
}

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

1 个答案:

答案 0 :(得分:2)

GroupBy中的每个群组中使用SelectMany

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

以上假设具有相同Config的{​​{1}}个对象也具有相同的Id s。