为什么不链接只是在连接中使用==运算符,如果t可以在'where'子句中使用它?
答案 0 :(得分: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 });
使用equals关键字可以使一个lambda结束而另一个lambda开始变得无法辨认。另一方面,对于where子句,有一个lambda表达式决定每个项是否匹配:
from prod in products
where prod.CategoryID == 1
products.Where( prod => prod.CategoryID == 1 )
理论上,连接可以使用单个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 });
但是,通过计算两个键并进行比较本身,LINQ可以使用哈希表来计算连接,而不是必须为每对元素执行任意比较。
答案 1 :(得分:6)
您将不得不问设计师,但很明显,允许任何(布尔)表达式将允许太多的可能性。使用像equals
这样的特殊关键字可以更容易地将它作为2个正确的列限制在规范中。
我找到了关于The Moth的讨论。