【问题标题】:Is this lambda expression possible?这个 lambda 表达式可能吗?
【发布时间】:2009-04-28 07:03:45
【问题描述】:

感谢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 是对象列表。

【问题讨论】:

  • 您能解释一下为什么 Marc Gravell 的回答不起作用吗?它应该工作。另外,请尝试在那里回复,而不是两次问同一个问题。
  • 这篇文章与其他的不同。不要投反对票。
  • 不是重复的。 select b -> select f 会有所作为。
  • @Mehrdad 抱歉没有看到 select f vs select b。
  • 我在问题中添加了进一步的解释。对混乱感到抱歉。感谢您的帮助。

标签: c# linq lambda


【解决方案1】:

当然。查询语法只是语法糖。它会被编译器翻译成底层的 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2017-06-15
    • 2012-01-09
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多