2012-04-18 63 views
4

我有一個對象列表,其中每個對象都有一個「名稱」和其他不同的東西。我想過濾那些在List中沒有唯一名稱的對象。C#LINQ - Union()該組() - 結果

是否有一個LINQ聲明,我可以「聯合()」所有結果組,並只返回一個IEnumerable對象?

IEnumerable<MyObject> Results = (from x in Objects 
           group x by x.Name into g 
           where g.Count() > 1 
           select g) 
           .COMBINE_OR_WHATEVER(); 

謝謝!

+2

那麼,你想要所有來自'Objects'的屬性,其中Name屬性的值只出現一次?你爲什麼要檢查'Count()> 1',它不應該是'Count()= 1'? – 2012-04-18 12:16:59

+0

@ scott.korin:這取決於他的意思是「過濾掉」。我想這可能意味着「保持」或「刪除」取決於你的觀點。 – 2012-04-18 12:18:05

回答

9

是的,有。您可以使用SelectMany

IEnumerable<MyObject> Results = (from x in Objects 
           group x by x.Name into g 
           where g.Count() > 1 
           select g) 
           .SelectMany(x => x); 
+0

就是這樣,謝謝! – Jens 2012-04-18 12:33:42

1

我想你想只用唯一的名稱對象(「我想過濾掉沒有在該列表中唯一的名稱的對象」):

var result = Objects.GroupBy(o => o.Name) 
      .Where(grp => grp.Count() == 1) 
      .SelectMany(grp => grp); 
+0

從語義上講,你是對的,你應該得到的分數:-) – Jens 2012-04-19 08:17:34