2010-01-22 253 views
3

我的應用程序的排序已經包含類似下面的許多一對多關係的實體框架模型:許多一對多的實體框架

ProductGroup: 
    Scalar: Id, Name 
    Navigation: ProductGroupProduct 
Product: 
    Scalar: Id, Sku, Description, etc. 
    Navigation: ProductGroupProduct 
ProductGroupProduct: 
    Scalar: ProductGroupId, ProductId, Position 
    Navigation: Product, ProductGroup 

注意中間表如何有一個名爲位置的標屬性,指定產品在產品組中顯示的順序。

如何編寫一個LINQ查詢,返回按Position屬性排序的給定產品組中的產品列表?如果我正在編寫好的SQL'SQL,我會寫這樣的東西:

SELECT p.Id, p.Sku, p.Description 
FROM Product p 
INNER JOIN ProductGroupProduct pgp ON p.Id = pgp.ProductId 
WHERE pgp.ProductGroupId = @MyProductGroupId 
ORDER BY pgp.Position 

但我無法找到LINQ。

回答

3

嗯,你的SQL將無法正常工作,因爲沒有ProductGroup.Position

但我想你想要

var q = from pgp in Context.ProductGroupProducts 
     where pgp.ProductGroup.Id == id 
     orderby pgp.Position 
     select pgp.Product; 
+0

甜,這就是我所需要的。我一直試圖從產品的角度來看它。我沒有想到我可以從中間開始。謝謝。 哦,我會修復SQL。這就是我在沒有先檢查它的情況下將它輸入到編輯器中所得到的結果。 – 2010-01-23 13:35:59

+1

你也可以從產品做到這一點,但它更*更難:從Context.Products中的p讓pgp =(來自p.ProductGroups中的pgp,其中pgp.ProductGroup.Id == id).FirstOrDefault()其中pgp != null orderby pgp.Position select p;' – 2010-01-23 15:18:42