Linq to sql Linq问题-为什么在这里使用外部联接?

Linq to sql Linq问题-为什么在这里使用外部联接?,linq-to-sql,Linq To Sql,我有以下来自AdventureWorks数据库的查询 from customer in Customer where customer.CustomerID == 20042 select new { customer.AccountNumber, Order = from order in customer.SalesOrderHeader select new { order } } Customer表与SalesOrderHeader具有1:M关系。生成的T-SQL在Sa

我有以下来自AdventureWorks数据库的查询

from customer in Customer
where customer.CustomerID == 20042
select new { 
 customer.AccountNumber, 
 Order = from order in customer.SalesOrderHeader
   select new { order }
 }

Customer表与SalesOrderHeader具有1:M关系。生成的T-SQL在SalesOrderHeader表上执行左外部联接。有人能告诉我为什么吗?如果我想要一个内部连接呢。如何更改此查询?

即使是一对多查询,也必须允许它是一对零。也就是说,客户可能没有订单。如果您不进行外部加入,则如果该特定客户没有订单,您将根本无法获得任何记录。

如果您希望内部加入,请使用以下方法:

from customer in Customer
where customer.CustomerID == 20042
from order in customer.SalesOrderHeaders
select new { customer.AccountNumber, Order = order }
from customer in Customer
where customer.CustomerID == 20042
where customer.SalesOrderHeaders.Any()
select new {  
 customer.AccountNumber,  
 Order =
   from order in customer.SalesOrderHeaders
   select order
} 
如果您只想筛选出没有SalesOrderHeader的客户,请使用以下方法:

from customer in Customer
where customer.CustomerID == 20042
from order in customer.SalesOrderHeaders
select new { customer.AccountNumber, Order = order }
from customer in Customer
where customer.CustomerID == 20042
where customer.SalesOrderHeaders.Any()
select new {  
 customer.AccountNumber,  
 Order =
   from order in customer.SalesOrderHeaders
   select order
} 

我想你没有抓住我问题的重点。为什么L2S会自动选择进行左外部联接,如果我想要内部联接(可能不会返回任何记录),我的查询将如何更改?