【问题标题】:Linq Merge listsLinq 合并列表
【发布时间】:2012-06-15 21:32:39
【问题描述】:

我的班级:

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

我有IEnumerable&lt;Foo&gt;。我想得到List&lt;Foo&gt;按A分组,并得到Bars列表,其中包含Bars for group的所有元素。

所以最终的 Foo.Bars 应该包含组中 Bar 的所有元素

linq 可以吗?

【问题讨论】:

  • 您的源IEnumerable&lt;Foo&gt; 中的Foos 不是已经这样了吗?您的来源必须是不同的类型,对吧?源实际上是什么样的?
  • 不,我想获得相同类型的集合,但要合并列表

标签: c# linq


【解决方案1】:
var result = foos.GroupBy(f => f.A)
                 .SelectMany(grp => grp.Select(f => f.Bars));

正如 Rawling 所说,这返回的不是IEnumerable&lt;Foo&gt;,所以试试这个:

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

我不确定您是否想要一个不同的 Bars 列表。请注意,您可能需要覆盖 Bar 类中的 EqualsGetHashCode

【讨论】:

  • 这似乎是他可能正在寻找的东西,但我仍然对实际来源感到困惑。
  • 这不会返回List&lt;Foo&gt;
猜你喜欢
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
相关资源
最近更新 更多