2011-01-25 3 views
3

これは間違った方法ですが、オブジェクト内のIEqualityComparer文字列値

私はLINQにオブジェクトのリストを持っています。今、私はそのリスト内の任意のオブジェクトは、文字列値を持っているかどうかを確認しようとしている

MyObj 
    string name 
    string somethingElse 

List<MyObj> myObjects; 

です。

if (Model.myObjects.Contains("thisobject", new MyObjComparer())) 
{ 
} 

私は、

public class MyObjComparer: IEqualityComparer<MyObj> 
{ 
    public bool Equals(string containsString, MyObj obj) 
    { 
     return obj.name == containsString; 
    } 
} 

オブジェクトフィールドの文字列値を比較するために比較機能を使用するにはどうすればよいですか?次のように

答えて

10

のような何かができる:

if (Model.myObjects.Any(o => o.name == "thisobject")) 
{ 
} 
+0

ああ、私は、述部デリゲートをとる 'Any'のオーバーロードについて忘れてしまった。 +1! –

+0

right right +1 – Divi

+0

私はcomparerを丁寧に使っていないことを指摘してくれてありがとうございます。 – griegs

2

あなたはFindAllメソッドを使用することができます。

foreach(var item in Model.myObjects.FindAll(x=>x.Contains("thisobject"))) 
{ 
//Do your stuff with item 
} 
+0

があれば、私は本当に唯一のかを確認したいです一致するリスト内の単一項目。私はカウントを行うことができますが、コンターを使用したいと思います – griegs

+0

+1 @ハリーに照らせば – griegs

2

等値比較は、同じタイプの2つのオブジェクトが等しいかどうかを伝えるために良いだけです。私はあなたのユースケースを知らないが、あなたは、単に簡単に方法がこれを行うことです

if (Model.myObjects.Where(x => x.name == "thisobject").Any()) 
{ 
    // Do something 
} 
+0

ああ、そうです。それが意味です。ありがとう@ハリー – griegs