2009-04-27 50 views
2

感謝this的幫助。這是lambda表達式嗎?

試過,沒有運氣..

我知道

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; 

可以類似表述產生的呢?

編輯: 對不起,我忘了f.bar在第二個例子中是一個對象列表。

+0

你能解釋爲什麼Marc Gravell的回答不起作用嗎?它應該工作。此外,請嘗試回覆,而不是兩次詢問相同的問題。 – tofi9 2009-04-27 22:47:58

回答

4

當然。查詢語法只是一個語法糖。它將被編譯器翻譯爲底層lambda語法,因此每個查詢表達式都有一個等價的基於lambda的表示。

這可能是你所需要的(這是不完全等同於但是當你只是一個bar匹配每個foo的查詢工作):

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);