Tại sao không liên kết chỉ đơn giản là sử dụng toán tử == trong phép nối nếu t có thể sử dụng nó trong mệnh đề 'where'?Tại sao toán tử 'bằng' trong LINQ tham gia?
Trả lời
Hai bên của sự bình đẳng trong một phép nối được coi là hai biểu thức lambda riêng biệt tạo ra các khóa cho hai trình tự.
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 });
Sử dụng từ khóa bằng làm cho nó không rõ ràng khi một lambda kết thúc và phần còn lại bắt đầu. Đối với một mệnh đề where, mặt khác, có một biểu thức lambda duy nhất mà quyết định xem mỗi mục phù hợp:
from prod in products
where prod.CategoryID == 1
products.Where(prod => prod.CategoryID == 1)
Về lý thuyết, tham gia có thể đã được thực hiện với một lambda duy nhất là
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 });
Tuy nhiên , bằng cách tính toán hai khóa và thực hiện so sánh, LINQ có thể sử dụng các bảng băm để tính toán phép nối hiệu quả hơn nếu nó phải thực hiện một phép so sánh tùy ý cho mỗi cặp phần tử.
Bạn sẽ phải hỏi các nhà thiết kế nhưng rõ ràng là cho phép bất kỳ biểu thức (boolean) nào cho phép có quá nhiều khả năng. Sử dụng một từ khóa đặc biệt như equals
làm cho nó dễ dàng hơn nhiều để hạn chế nó để các đặc điểm kỹ thuật như 2 cột thích hợp.
Tôi đã tìm thấy một cuộc thảo luận trên The Moth.
- 1. Tại sao LINQ tham gia khác nhau
- 2. linq tham gia loại toán tử với cú pháp lambda
- 3. Toán tử "IN" trong LINQ
- 4. LINQ Tham gia bằng phím Nullable
- 5. Tham gia lại trong LINQ?
- 6. LINQ to bản sao Nhibernate tham gia
- 7. Tại sao toán tử gia tăng cho giá trị gia tăng trong C?
- 8. LINQ tham gia - Hiệu suất
- 9. Tham gia loại ẩn danh trong LINQ
- 10. Toán tử bậc ba trong LINQ, tại đó khoản
- 11. LINQ tham gia với OR
- 12. LINQ: Sự khác nhau giữa == và bằng tham gia là gì?
- 13. LINQ to Entities Tham gia vào DateTime.DayOfWeek
- 14. Tại sao LINQ này tham gia công việc truy vấn, nhưng điều này khác không?
- 15. LINQ Tham gia bằng C# với nhiều điều kiện
- 16. LINQ Tham gia ở đâu Khoản
- 17. Hive Query- Tham gia hai bảng trên ba gia nhập điều kiện với toán tử OR
- 18. Tại sao toán tử = trả về tham chiếu không const tham chiếu
- 19. LINQ truy vấn 'và' 'hoặc' toán tử
- 20. LINQ Tham gia ở trên cùng 1
- 21. LINQ, không thể tham gia vào chuỗi
- 22. Tại sao nên bật() tham gia một đối số?
- 23. LINQ to SQL External Outer Tham gia
- 24. Chọn tất cả các cột cho tất cả các bảng trong tham gia + LINQ tham gia
- 25. Tại sao các toán tử gán quá tải trong VB.NET?
- 26. Tại sao có một toán tử sizeof ... trong C++ 0x?
- 27. tại sao chúng ta thích? đến ?? toán tử trong C#?
- 28. Cần trợ giúp về Đối diện với Tham gia bên trong Truy vấn bằng LINQ
- 29. Nhóm tham gia khiến IQueryable trở thành IEnumerable, tại sao?
- 30. Sử dụng chứa trong LINQ to SQL tham gia
Điều đó có ý nghĩa. – ProfK