代码之家  ›  专栏  ›  技术社区  ›  sre

这个lambda表达式可能吗?

  •  2
  • sre  · 技术社区  · 17 年前

    感谢你的帮助 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 回复  |  直到 17 年前
        1
  •  4
  •   Mehrdad Afshari    17 年前

    一定地。查询语法只是一种语法糖。编译器会将其转换为底层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);