LINQ中等于和 = 有什么区别?
Dim list As List(Of Foo) = (From a As Foo In FooList _
Join b As Bar In BarList _
On a.Something = b.Something _
Select a).ToList()
与
Dim list As List(Of Foo) = (From a As Foo In FooList _
Join b As Bar In BarList _
On a.Something Equals b.Something _
Select a).ToList()
答案 0 :(得分:5)
来自引用马特沃伦的The Moth
“C#有'等于'这个词的原因 而不是'=='运算符 明确说明'on'条款 需要你提供两个单独的 比较的表达式 平等不是一个谓词 表达。从连接模式映射 到Enumerable.Join()标准 查询运算符,指定两个 单独的代表 然后计算可以的值 相比较。它需要它们分开 委托以构建查找 表与一个和探测到 查找表与另一个。满满的 像SQL这样的查询处理器是免费的 检查单个谓词表达式 并选择它将如何处理 它。然而,要使LINQ运行类似 SQL需要连接 条件总是指定为 表达树,一个重要的 简单的内存中的开销 对象案例。“
后面的文章。
更新:Visual Basic团队的Vladimir Sadov告诉我,VB也使用Equals的原因基本相同。
答案 1 :(得分:1)
不同之处在于第二个版本将编译而第一个版本不会编译。 VB查询语法要求在以这种方式比较LINQ查询中的项时使用上下文关键字Equals
。
此运算符的工作方式在VB语言规范的第11.21.5节中定义