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