2009-04-27 117 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);