我有如下的Entity Framework模型和相应数据库表中的数据:
问题:如何有效地查询模型以返回给定人员的唯一sales_type实体? (person_sales表非常大,~1BN行,其他表相对较小)
示例:我想知道一个人“John”的所有独特sales_types。这里的答案将返回3个独特的项目:“内部”,“外部”和“混合”。
答案 0 :(得分: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]