2009-10-25 39 views

Trả lời

10

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ử.

6

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

Điều đó có ý nghĩa. – ProfK

Các vấn đề liên quan