2009-02-26 26 views
3

選擇重複值我有兩個類:C#從IGrouping

class Foo 
{ 
    public Bar SomeBar { get; set; } 
} 

class Bar 
{ 
    public string Name { get; set; } 
} 

我有FOOS的名單,我組在一起:

var someGroup = from f in fooList 
       orderby f.SomeBar.Name ascending 
       group f by f.SomeBar.Name into Group 
       select Group; 

我怎樣才能獲得不同的酒吧從列表someGroup?

回答

7

是否可能有多個同名的Bar?如果是這樣,這很棘手。如果沒有,你可以只將其更改爲:

var grouped = from f in fooList 
       orderby f.SomeBar.Name ascending 
       group f by f.SomeBar into Group 
       select Group; 

var bars = grouped.Select(group => group.Key); 

或者,如果你只是想每一個酒吧,你可以用你的原始查詢堅持,但改變的最後一位:

var someGroup = from f in fooList 
       orderby f.SomeBar.Name ascending 
       group f by f.SomeBar.Name into Group 
       select Group; 

var bars = someGroup.Select(group => group.First().SomeBar); 

這將採取每個組中的第一個Foo,並找到它的Bar。

0

如果定義「是不同的」,由一個特殊的Equals實施Bar,你可以使用:

var result = someGroup.SelectMany(x => x.Select(t => t.SomeBar)).Distinct(); 
0

人問過類似的問題,所以我做了這個結合每個人的知識:

var newlist<T2> = oldlist<T1>.GroupBy(g => g.distinct_var).Select(g => g.First()) //a 
       .Select(r=> new T2() {var1=r.va1, var2=r.var2 ...etc}).ToList(); //b 

它的功能是:

a。第一行選擇你選擇的不同項目,這就是你想要的。

b。第二行通過構建新的T2列表將舊的type1轉換爲新的type2。

對於你的問題可能是過度的,只是把你不需要的東西砍掉。