2009-07-28 14 views
3

をオブジェクトのサブリストを選択し、私は、LINQと初心者だと私は次のような問題を解決するためにそれを使用することが可能であるかどうかを知りたい:のC#/ LINQ同じプロパティを持つ

私はクラスを持っている:

public class myClass 
{ 
    public int Id { get; set; } 
    public int Category { get; set; } 
    public string Text { get; set; } 
} 

私はmyClassオブジェクトのリストを持っています。

public List<myClass> myList; 

私は簡単にLINQでプロパティTextの値が複数回存在しているため、すべてのmyClassオブジェクトを含むmyListのサブリストを取得することができます。

例えば、私が持っている場合

myClass A = new myClass { Id=1, Category=1, Text="Hello World!"}; 
myClass B = new myClass { Id=2, Category=2, Text="Hello World!"}; 
myClass C = new myClass { Id=3, Category=2, Text="Good Bye!"}; 
myList.AddRange(new []{ A, B, C }); 

は、私が理想的ではない

答えて

5

おそらく私のサブリスト内のオブジェクトにABを持っているはずですが、多分:

var result = myList.GroupBy(x=>x.Text).Where(grp => grp.Count() > 1) 
      .SelectMany(x=>x); // .ToList() if you want a list 

またはクエリ構文で

var result = from x in myList 
      group x by x.Text into grp 
      where grp.Count() > 1 
      from y in grp 
      select y; // .ToList() if you want a list 
+0

を、私は私のために理解しやすく、素晴らしい確かに と私はクエリ構文を好む瞬間のために働く、この1に投票: ) – PierrOz

1

これは動作します:

var sublist = (from a in myList 
       from b in myList 
       where a.Text == b.Text 
        && a.Id != b.Id 
       select a).Distinct(); 

テストプログラム:

void Main() 
{ 

    myClass A = new myClass { Id=1, Category=1, Text="Hello World!"}; 
    myClass B = new myClass { Id=2, Category=2, Text="Hello World!"}; 
    myClass C = new myClass { Id=3, Category=2, Text="Good Bye!"}; 
    myClass D = new myClass { Id=4, Category=7, Text="Hello World!"}; 
    List<myClass> myList = new List<myClass>(); 
    myList.AddRange(new []{ A, B, C, D }); 

     var sublist = (from a in myList     
     from b in myList     
     where a.Text == b.Text     
     && a.Id != b.Id     
     select a).Distinct(); 

     sublist.Dump(); 
} 
public class myClass{ public int Id { get; set; } public int Category { get; set; } public string Text { get; set; }} 
+0

これは2つのマッチがあるときに機能しますが、それ以上あるときは爆発します。 3マッチで6つの結果が得られます。 –

+0

@Marc - 修正するために追加された – cjk

+0

Dump()メソッドは[Linqpad](http://www.linqpad.net/) –