2012-04-18 18 views
4

私はオブジェクトのリストを持っています。ここにはすべてのオブジェクトに "名前"と他のものがあります。そのリストに一意の名前を持たないオブジェクトを除外したいと思います。C#LINQ - Union()のGroup() - 結果

LINQステートメントがあります。結果のグループをすべて "Union"して、オブジェクトの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

したがって、Nameプロパティの値が1回しか表示されない「Objects」のすべてのプロパティが必要ですか?なぜCount()> 1をチェックしているのですか?Count()= 1ではないでしょうか? –

+0

@ scott.korin:それは彼が「フィルタアウト」することによって何を意味するかによって異なります。私はそれがあなたの視点に応じて "維持"または "削除"を意味するかもしれないと思います。 –

答えて

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

1

私はあなたが(「私はにしたいがそのリスト固有の名前を持っていないそれらのオブジェクトをフィルタ」)、固有の名前を持つオブジェクトだけをしたいと思う:

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

意味的には、あなたは正しいですし、ポイントを得るべきです:-) – Jens