2009-04-27 6 views
2

thisのヘルプに感謝します。これを試しこのラムダ式は可能ですか?

は、運なし..私は

from f in list 
where f.bar == someVar 
select f 

list.Where(f => f.bar == someVar); 

のように記述することができる知っている

は、同様の表現は、

from f in foo 
from b in f.bar 
where b.something == someVar 
select f; 

から作成することができますか?

編集: 申し訳ありません、2番目の例のf.barはオブジェクトのリストです。

+0

Marc Gravellの答えがうまくいかなかった理由を説明できますか?それは動作するはずです。また、同じ質問を2回尋ねる代わりに、そこに返信してみてください。 – tofi9

+1

この投稿は他とは異なります。投票しないでください。 –

+1

重複していません。 'select b' - >' select f'は違いを生むでしょう。 –

答えて

4

間違いなく。クエリ構文は単なる構文的な砂糖です。これはコンパイラによって基底のラムダ構文に変換されるので、すべてのクエリ式は同等のラムダベースの表現を持ちます。

これは、あなたが(これはそれとまったく同じではないですが、あなただけの各fooでクエリに一致する1 barを持っていたときに動作します)必要なものはおそらくです:

var result = foo.Where(f => f.bar.Any(b => b.something == someVar)); 

厳密に同等のバージョンは次のとおりです。

var result = foo.SelectMany(f => f.bar, (f, b) => new { F = f, B = b }) 
       .Where(x => x.b.something == someVar) 
       .Select(x => x.f); 
関連する問題