2009-09-18 69 views

回答

9

喬恩的答案將工作,但恕我直言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%。考慮你的關係已經在你的數據庫和你的模型中定義好了。你真的想在你編寫的每個查詢中再次複製它們,並且在重構模型時打破查詢嗎?

+1

哇..好點 – user161433 2009-09-18 18:56:20

+3

@克雷格 - 我希望我能理解幾個小時前我在這裏看到的東西。我錯過的是「從客戶訂單。訂單」 - 我做的相當於「從db.Orders訂購」,這是完全不同的。不過謝謝你。 – chris 2010-01-28 16:03:50

+2

這會在查詢中生成交叉連接... – dudeNumber4 2010-08-11 16:50:00

7

好了,我不知道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條款)。

現在我懷疑你已經試過了 - 如果是這樣,出了什麼問題?

+1

雖然這確實有效,但我相信在L2E的特定情況下使用關係而不是聯接更好。 – 2009-09-18 13:27:28

+0

當我們從幾個給定的信息實體('from info in db.Info where info ... join product ...')開始,那麼在那種情況下明確寫入的聯接是否更有效?或者在EF中沒有關係,並且會從客戶的db.Customers中從客戶的訂單中訂購。從訂購的產品中訂購。從product.Info的信息中獲得產品...信息......一樣高效? – j00hi 2017-03-23 08:07:36

+0

@ j00hi:基本上,您必須查看正在生成的SQL。 – 2017-03-23 09:14:23