我一直在阅读Microsoft .NET Framework 4中的编程Microsoft LINQ,现在我理解joinLINQ中的条款,但我对它的定义有疑问或质疑; 在书中它被定义为:
您只能通过使用
equals与==运算符不同的特殊关键字来定义相等比较,因为操作数的位置很重要.使用时equals,左键消耗外部源序列,右键消耗内部源序列.外部源序列仅在范围的左侧equals,而内部源序列仅在右侧的范围内.
并且还有关于此运算符的正式定义:
join-clause ::= join innerItem in innerSequence on outerKey equals innerKey
请问,有人可以用其他的话或通过释义来解释我的上述概念吗?
sim*_*rcl 10
我想这是因为连接中的'equals'不像==那样工作,所以语言设计者决定不调用它做同样的事情.
在C#中,有一种给定a == b与b == a完全相同.在连接的定义中,情况并非如此:
var list = from a in ctx.TableA
join b from ctx.TableB on a.Id equals b.tableAId
Run Code Online (Sandbox Code Playgroud)
以上这个是有效的.
var list = from a in ctx.TableA
join b from ctx.TableB on b.tableAId equals a.Id
Run Code Online (Sandbox Code Playgroud)
这不会编译.语言规范说的是必须首先指定'外部'表(在本例中为TableA),而内部表(TableB)必须是第二个.我认为语言设计者认为这与==的工作方式有很大的不同,使用它是一个坏主意,他们想出了使用'等于'的想法.
我想我可能是对的,但只有所涉及的语言设计师才能真正了解真相.