有很多关于SO已经有大约左Linq中的联接问题,我已经看了所有的人使用join
关键字来达到预期的结束。左加入Linq?
这是没有道理给我。假设我有Customer
和Invoice
的表格,通过Invoice
上的外键CustomerID
连接。现在我想运行包含客户信息和任何发票的报告。 SQL是:
select c.*, i.*
from Customer c
left join Invoice i on c.ID = i.CustomerID
从我上见过这样的答案,人们大多提示:
var q = from c in Customers
join i in Invoices.DefaultIfEmpty() on c.ID equals i.CustomerID
select new { c, i };
我真不明白这是如何的唯一途径。 LinqToSQL类已经定义了Customer
和Invoice
之间的关系;为什么我不得不重复join
条款?如果我想要一个内部联接它只会一直:
var q = from c in Customers
from i in c.Invoices
select new { c, i };
不指定加盟领域!
我想:
var q = from c in Customers
from i in c.Invoices.DefaultIfEmpty()
select new { c, i };
但只是给了我同样的结果,好像它是一个内部联接。
是不是有这样做的更好的办法?
谢谢,但是这并没有真正回答我的问题......是不是有更好的办法,采取的这种关系已经被定义的事实优势? – 2009-07-07 14:42:11