【问题标题】:What's the difference between left side and right side of the equals in a LINQ joinLINQ连接中等号的左侧和右侧有什么区别
【发布时间】:2011-03-07 00:59:25
【问题描述】:

当在 Linq 中加入时,例如

from c in customers join x in somelistofcustomers on x.Id equals c.Id

你会得到错误

x 不在“等于”左侧的范围内。考虑交换 'equals' 两边的表达式

做起来很简单,但我想澄清一下为什么 x 不在左侧的范围内,但不知何故在 equals 的右侧范围内

【问题讨论】:

    标签: linq


    【解决方案1】:

    这与编译器将 LINQ 扩展为底层扩展方法的方式有关。

    您的查询正在被翻译成:

    customers.Join(somelistofcustomers, c => x.Id, x => c.Id, (c, x) => ...)
    

    c => x.Idx => c.Id 这两个 lambda 表达式显然使它们的局部变量超出了范围。由于 LINQ 只是对实际调用的一个很好的糖衣,编译器会正确地抱怨变量超出范围。

    【讨论】:

      【解决方案2】:

      只是一个约定,基本上join的结构如下

      from identifier in {outer-sequence} 
      join identifier2 in {inner-sequence} 
      on {outer-key-selector} equals {inner-key-selector}
      

      identifier{outer-key-selector} 是成对的,identifier2{inner-key-selector} 也是成对的 - 你不能切换顺序,因为它们的位置在连接语法中是固定的。

      【讨论】:

        猜你喜欢
        • 2020-01-28
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 2013-09-13
        • 2020-12-13
        相关资源
        最近更新 更多