2012-06-15 41 views
2

我的類:LINQ的合併列表

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

我有IEnumerable<Foo>。我希望得到List<Foo>由A分組,並獲得Bars列表,其中包含Bars中的所有元素。

所以最終Foo.Bars應該包含組

是否有可能與LINQ酒吧的所有元素?

+0

你的源'IEnumerable '不是'Foos'已經那樣嗎?你的來源必須是不同的類型,對吧?來源實際上是什麼樣的? – bluevector

+0

不,我想要獲取相同類型的集合,但要合併列表 –

回答

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

正如Rawling已經提到的,這不是返回一個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或不是一個獨特的名單。請注意,您可能需要覆蓋類Bar中的EqualsGetHashCode

+0

這看起來像他可能要查找的內容,但我仍對實際來源感到困惑。 – bluevector

+0

這不會返回'List '。 – Rawling

+0

@Rawling:編輯我的答案。 –