2014-02-18 71 views
0

返回獨特的價值觀我有如下實體框架模型和數據在相應的數據庫表:實體框架查詢 - 從子表

Entity Model

問題:如何有效地查詢模型返回特定人員的唯一sales_type實體? (person_sales表非常大,〜1BN行,其他表相對較小)

示例:我想知道某個人「John」的所有唯一sales_types。這裏的答案將返回3個獨特的項目:「內部」,「外部」和「混合」。

回答

0

您明確需要索引person_id列爲person_sales表。和查詢會這樣看

var salesTypes = (from p in db.person 
        join ps in db.person_sales on p.id equals ps.person_id 
        join sm in db.sales_mapping on ps.sales_mapping_id equals sm.id 
        join st in db.sales_types on sm.sales_type_id equals st.id 
        where p.name == "John" 
        select st.sales_name).Distinct(); 

生成的SQL的樣子:

SELECT 
    [Distinct1].[sales_name] AS [sales_name] 
    FROM (SELECT DISTINCT [Extent4].[sales_name] AS [sales_name] 
      FROM [dbo].[person] AS [Extent1] 
      INNER JOIN [dbo].[person_sales] AS [Extent2] 
       ON [Extent1].[id] = [Extent2].[person_id] 
      INNER JOIN [dbo].[sales_mapping] AS [Extent3] 
       ON [Extent2].[sales_mapping_id] = [Extent3].[id] 
      INNER JOIN [dbo].[sales_types] AS [Extent4] 
       ON [Extent3].[sales_type_id] = [Extent4].[id] 
      WHERE N'John' = [Extent1].[name] 
    ) AS [Distinct1] 
+0

工程。如果我需要在sales_type表中選擇整個行而不是僅選擇sales_name列,那麼我該怎麼做? (區別仍然基於列sales_name) – Nuts

+0

@ user2143213如果有多個同名的sales_types,您需要哪個'id'?預計返還的非獨特銷售類型的數量是多少? –

+0

好問題:假設區分應該基於列ID(=主鍵) – Nuts