Có rất nhiều câu hỏi về SO đã được về tham gia trái trong LINQ, và những cái tôi đã nhìn tất cả sử dụng các từ khóa join
để đạt được kết thúc mong muốn.Tham gia lại trong LINQ?
Điều này không có ý nghĩa với tôi. Giả sử tôi có các bảng Customer
và Invoice
, được liên kết bằng khóa ngoài CustomerID
trên Invoice
. Bây giờ tôi muốn chạy báo cáo chứa thông tin khách hàng, cộng với mọi hóa đơn. SQL sẽ là:
select c.*, i.*
from Customer c
left join Invoice i on c.ID = i.CustomerID
Từ những gì tôi đã nhìn thấy các câu trả lời trên SO, người ta chủ yếu là gợi ý:
var q = from c in Customers
join i in Invoices.DefaultIfEmpty() on c.ID equals i.CustomerID
select new { c, i };
Tôi thật sự không hiểu làm thế nào điều này có thể là cách duy nhất. Mối quan hệ giữa Customer
và Invoice
đã được xác định bởi các lớp LinqToSQL; tại sao tôi phải lặp lại nó cho mệnh đề join
? Nếu tôi muốn tham gia bên trong, nó sẽ đơn giản là:
var q = from c in Customers
from i in c.Invoices
select new { c, i };
mà không chỉ định trường đã tham gia!
tôi đã cố gắng:
var q = from c in Customers
from i in c.Invoices.DefaultIfEmpty()
select new { c, i };
nhưng điều đó chỉ cho tôi cùng một kết quả như thể nó là một bên tham gia.
Không có cách nào tốt hơn để làm điều này?
Cũng thổi tôi xuống - bạn đã đúng! Bây giờ, tại sao tôi nghĩ rằng điều này đã không làm việc ...? OK, tôi khiêm tốn trở lại ... câu hỏi này là do sự hiểu lầm của riêng tôi. CẢM ƠN! :) –