为什么LINQ中的'equals'运算符加入?

Pro*_*ofK 5 .net linq

为什么不链接只是在连接中使用==运算符,如果t可以在'where'子句中使用它?

ste*_*son 10

连接中的等式的两边被视为两个单独的lambda表达式,它们生成两个序列的键.

from category in categories
join prod in products on category.ID equals prod.CategoryID

categories.Join(products,
                category => category.ID,
                prod => prod.CategoryID,
                (category, prod) => new { Category = category, Product=prod });
Run Code Online (Sandbox Code Playgroud)

使用equals关键字会使一个lambda结束而另一个lambda开始时无法辨认.另一方面,对于where子句,有一个lambda表达式决定每个项是否匹配:

from prod in products
where prod.CategoryID == 1

products.Where( prod => prod.CategoryID == 1 )
Run Code Online (Sandbox Code Playgroud)

从理论上讲,连接可以用一个lambda实现

from category in categories
join prod in products on category.ID == prod.CategoryID

categories.Join(products,
                (category, prod) => category.ID == prod.CategoryID,
                (category, prod) => new { Category = category, Product=prod });
Run Code Online (Sandbox Code Playgroud)

但是,通过计算两个键并进行比较本身,LINQ可以使用哈希表来计算连接,而不是必须为每对元素执行任意比较.


Hen*_*man 6

您将不得不问设计师,但很明显,允许任何(布尔)表达式将允许太多的可能性.使用特殊的关键字equals可以更容易地将它作为2个适当的列约束到规范.

我找到了关于的讨论.