2010-11-09 50 views
1

我從AdventureWorks數據庫Linq問題 - 爲什麼在這裏使用外連接?

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

Customer表下面的查詢有一個1:SalesOrderHeader的中號的關係。生成的T-SQL在SalesOrderHeader表上執行左外連接。有人能告訴我爲什麼嗎?而且,如果我想要一個內部連接而不是。我將如何更改此查詢?

回答

1

如果你想內部聯接,使用這樣的:如果你想只是想篩選出沒有SalesOrderHeaders客戶

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 
} 
1

即使它是一對多的,你仍然必須考慮它是一對一的。也就是說,客戶可能沒有訂單。如果你不做外部連接,如果這個特定的客戶沒有訂單,你將不會得到任何記錄。

+0

我想你錯過了我的問題點。爲什麼L2S自動選擇執行左外連接,並且,如果我想要內連接(而不返回記錄),我的查詢會如何更改? – 2010-11-09 18:24:58