2014-02-18 65 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