Linq to sql Linq问题-为什么在这里使用外部联接?
我有以下来自AdventureWorks数据库的查询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
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会自动选择进行左外部联接,如果我想要内部联接(可能不会返回任何记录),我的查询将如何更改?