2009-07-22 6 views
3

linq式を使用してリストから選択しようとしていますが、範囲変数はブール値を返す静的メソッドで評価されます。メソッドを使って範囲変数を評価するときにtrueを返す範囲変数を選択したいと思います。Linqメソッドをラムダ式として評価する

var result = from rangeVariable in DataSource 
      where (rangeVariable => Foo.MethodReturnsBoolean(rangeVariable) == true) 
      select rangeVariable; 

私はこのエラーが出る:それはデリゲート型でないため

は、「ブール」を入力するラムダ式を変換できません。

誰でも何が起こっているのか、どのようにこれを達成できるのか説明できますか?

答えて

18

"where"句でラムダ式を使用する必要はありません。クエリ式の変換はそれを行います。ただ、使用:私は、何を検討したい

var result = from rangeVariable in DataSource 
      where Foo.MethodReturnsBoolean(rangeVariable) 
      select rangeVariable; 

var result = from rangeVariable in DataSource 
      where Foo.MethodReturnsBoolean(rangeVariable) == true 
      select rangeVariable; 

私は個人的には、その後、「== true」の冗長性(私はこれが唯一のサンプルコードだったけど、...)を削除します実際にはクエリ式を使用して購入しています。

var result = DataSource.Where(x => Foo.MethodReturnsBoolean(x)); 

それはしかしさらに良くなります:コンパイラが推測する必要はありませんあなたはだけあなたは、ドット表記を簡略見つけることが「どこで」(または単に「選択」をやって)やっている場合ラムダ式の戻り値(それは常にboolとなりますので)ので、あなただけのメソッドグループの変換を使用することができます。

var result = DataSource.Where(Foo.MethodReturnsBoolean); 

クリーナーはそれでどのくらい? :)

+0

非常に!ありがとうジョン! – theringostarrs

+0

+1私は頭が回転しなくなった後に答えます) – Gishu

+0

Datacontext.tableでrangeVariableからvar =を試してみましたが、どこでme.MethodThatReturnsBoolean(rangeVariable)を選択してrangeVariableを選択しましたか?RUNTIMEを取得しましたNotSupportedException:Method 'Boolean MethodThatReturnsBoolean(System.String ) 'はSQLへの変換をサポートしていません。どこのブール関数もwhere節に入れることができますか?助言がありますか? http://stackoverflow.com/questions/8662259/what-does-intellisense-mean-when-it-shows-that-it-expects-a-condition-in-the-w – bernie2436