我已經通過SO搜索,無法爲此找到一個可行的解決方案。我只是想知道Linq to Entities中多個內部連接的語法是什麼。由於你怎麼做多個內部聯接Linq到實體
回答
喬恩的答案將工作,但恕我直言using join in LINQ to Entities is usually wrong,因爲它重複您的模型中的代碼。我可以在L2E重寫一個更簡單的方法喬恩的查詢:
var query = from customer in db.Customers
from order in customer.Orders
from product in order.Products
from info in product.Info
select new
{
customer.Name,
info.BriefDescription
}
這就是打字的約50%的重複代碼的0%。考慮你的關係已經在你的數據庫和你的模型中定義好了。你真的想在你編寫的每個查詢中再次複製它們,並且在重構模型時打破查詢嗎?
好了,我不知道LINQ到實體特別,但正常的LINQ語法是:
var query = from customer in db.Customers
join order in db.Orders on customer.ID equals order.ID
join product in db.Products on order.ProductID equals product.ID
join info in db.Info on product.InfoID equals info.ID
select new { customer.Name, info.BriefDescription };
(即只是幾個join
條款)。
現在我懷疑你已經試過了 - 如果是這樣,出了什麼問題?
雖然這確實有效,但我相信在L2E的特定情況下使用關係而不是聯接更好。 – 2009-09-18 13:27:28
當我們從幾個給定的信息實體('from info in db.Info where info ... join product ...')開始,那麼在那種情況下明確寫入的聯接是否更有效?或者在EF中沒有關係,並且會從客戶的db.Customers中從客戶的訂單中訂購。從訂購的產品中訂購。從product.Info的信息中獲得產品...信息......一樣高效? – j00hi 2017-03-23 08:07:36
@ j00hi:基本上,您必須查看正在生成的SQL。 – 2017-03-23 09:14:23
哇..好點 – user161433 2009-09-18 18:56:20
@克雷格 - 我希望我能理解幾個小時前我在這裏看到的東西。我錯過的是「從客戶訂單。訂單」 - 我做的相當於「從db.Orders訂購」,這是完全不同的。不過謝謝你。 – chris 2010-01-28 16:03:50
這會在查詢中生成交叉連接... – dudeNumber4 2010-08-11 16:50:00