0
返回独特的价值观我有如下实体框架模型和数据在相应的数据库表:实体框架查询 - 从子表
问题:如何有效地查询模型返回特定人员的唯一sales_type实体? (person_sales表非常大,〜1BN行,其他表相对较小)
示例:我想知道某个人“John”的所有唯一sales_types。这里的答案将返回3个独特的项目:“内部”,“外部”和“混合”。
返回独特的价值观我有如下实体框架模型和数据在相应的数据库表:实体框架查询 - 从子表
问题:如何有效地查询模型返回特定人员的唯一sales_type实体? (person_sales表非常大,〜1BN行,其他表相对较小)
示例:我想知道某个人“John”的所有唯一sales_types。这里的答案将返回3个独特的项目:“内部”,“外部”和“混合”。
您明确需要索引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]
工程。如果我需要在sales_type表中选择整个行而不是仅选择sales_name列,那么我该怎么做? (区别仍然基于列sales_name) – Nuts
@ user2143213如果有多个同名的sales_types,您需要哪个'id'?预计返还的非独特销售类型的数量是多少? –
好问题:假设区分应该基于列ID(=主键) – Nuts