如果t可以在'where'子句中使用它,爲什麼不直接在連接中使用==運算符?爲什麼LINQ中的'equals'運算符加入?
5
A
回答
10
連接中的平等兩邊被視爲兩個單獨的lambda表達式,這兩個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結束而另一個開始的地方是不明確的。對於where子句,在另一方面,有一個單一的lambda表達式這決定每個項目是否匹配:
from prod in products
where prod.CategoryID == 1
products.Where(prod => prod.CategoryID == 1)
從理論上講,聯接可能已經有一個拉姆達實現
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可以使用散列表來更有效地計算連接,而不是爲每對元素執行任意比較。
6
你將不得不問設計師,但很明顯允許任何(布爾)表達式將允許太多的可能性。使用像equals
這樣的特殊關鍵字可以更容易地將它限定爲2個適當的列。
我在The Moth找到了一個討論。
相關問題
- 1. 爲什麼equals()方法當我們有==運算符?
- 2. 在Java中使用的ampersand-equals運算符是什麼?
- 3. Scala Koans中的===(triple-equals)運算符是什麼?
- 4. php overload equals運算符
- 5. PHP的Dot Equals`。=`運算符在Javascript中?
- 6. 爲什麼`:=`作爲中綴運算符?
- 7. 在LINQ中加入列並運行包含運算符
- 8. Linq中的「IN」運算符
- 9. ??在LINQ中的運算符
- 10. Linq中的運算符
- 11. 爲什麼DependencyProperty.UnsetValue被傳入Equals()
- 12. linq中的算術運算符
- 13. 爲什麼.Equals在這個LINQ示例中不起作用?
- 14. 運算符模塊中`in`的等效運算符是什麼?
- 15. SQL中的IN運算符和=運算符有什麼區別?
- 16. 爲什麼預增加運算符在C中給出右值?
- 17. 爲什麼在Java中加運算符總是產生Integer?
- 18. LINQ或運算符
- 19. Python中的插入符號運算符(^)在做什麼?
- 20. Linq爲什麼加入不同
- 21. 爲什麼添加運算符會添加散列鍵值對?
- 22. 爲什麼==運算符在MSVC中含糊不清的運算符重載
- 23. 爲什麼重載運算符&&錯誤?
- 24. 按位運算符:爲什麼〜35 = -36?
- 25. 爲什麼「==」運算符不起作用
- 26. 爲什麼Javascript運算符「&&」很奇怪?
- 27. 爲什麼不QString超載+運算符?
- 28. 運算符+ =重載,爲什麼是const?
- 29. 爲什麼運算符重載失敗?
- 30. 爲什麼沒有「< - 」運算符?
這很有道理。 – ProfK 2009-10-25 11:10:21