2012-04-04 35 views
3

如何使用LINQ實現以下分組通過?與LINQ

我有一些C#對象(我寫他們爲JSON爲了簡化只)

{ Name: A, Domain: a, SubDomain: 1} 
{ Name: B, Domain: a, SubDomain: 2} 
{ Name: C, Domain: b, SubDomain: 1} 
{ Name: D, Domain: b, SubDomain: 2} 
{ Name: E, Domain: c, SubDomain: 1} 

我想收集這些:

{ Domain: a ,{{Name: A, SubDomain: 1}, {Name: B, SubDomain: 2}} 
    Domain: b ,{{Name: C, SubDomain: 1}, {Name: D, SubDomain: 2}} 
    Domain: c ,{{Name: E, SubDomain: 1}} 
+5

'的GroupBy(X => x.Domain)' – gdoron 2012-04-04 12:03:16

+1

你試圖谷歌? [code.msdn](http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b) – stukselbax 2012-04-04 12:04:17

回答

8

你只是想按Domain

var list = GetListFromFoo(); 
var groupedList = list.GroupBy(x => x.Domain); 

正是基於這樣LINQ方法來完成:

public static IEnumerable<IGrouping<TKey, TSource>> GroupBy<TSource, TKey>(
    this IEnumerable<TSource> source, Func<TSource, TKey> keySelector) 

MSDN


如果我理解您的評論的權利,這是你在找什麼:

var groupedList = list.GroupBy(x => x.Domain, x => new 
             { 
              x.Name, 
              x.SubDomain 
             }); 

MSDN

+0

兩件事:1)每個鍵下的元素仍然是原始類型,不省略相互鍵的。 b)密鑰不是集合的成員,它在JSON序列化後沒有反映出來 – 2012-04-05 08:02:14

+0

@EladBenda。請顯示班級成員,你想要什麼樣的最終類型。 – gdoron 2012-04-05 09:44:48

+0

'{域:一個,{{名稱:A,子域:1},{名稱:B,子域:2}} 域:B,{{名稱:C,子域:1},{名稱:d,子域:2}} Domain:c,{{Name:E,SubDomain:1}}' – 2012-04-05 10:53:03