Linq Merge列表

时间:2012-06-15 13:10:24

标签: c# linq

我的课程:

    public class Foo
    {
        public int A { get; set; }
        public List<Bar> Bars { get; set; }
    }

我有IEnumerable<Foo>。我希望通过A获得List<Foo>分组,并获得Bars列表,其中包含Bars的所有元素。

所以最后的Foo.Bars应该包含组

中Bar的所有元素

linq可以吗?

1 个答案:

答案 0 :(得分:5)

var result = foos.GroupBy(f => f.A)
                 .SelectMany(grp => grp.Select(f => f.Bars));

正如罗林所提到的,这不是IEnumerable<Foo>,所以试试这个:

IEnumerable<Foo> result = 
            foos.GroupBy(f => f.A)
            .Select(grp => new Foo() { 
                A = grp.Key,
                Bars = grp.SelectMany(ff => ff.Bars).Distinct().ToList()
            });

我不确定您是否需要Bars的明确列表。请注意,您可能需要覆盖课程Equals中的GetHashCodeBar