这个lambda表达式可能吗?

时间:2009-04-27 22:43:37

标签: c# linq lambda

感谢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;

编辑: 对不起,我忘了第二个例子中的f.bar是一个对象列表。

1 个答案:

答案 0 :(得分: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);