我創建了三個表 - Podcast,Category和CategoryLink。 CategoryLink表只包含兩列--PodcastId和CategoryId。 我已經描述了這些表之間的多對多關係,寫在這個article。 所有工作正常,但我不知道如何正確查詢。 現在我做到這一點通過以下方式:使用多對多關係進行查詢的正確方法
var ps = db.Podcasts.Where(p => p.Status.SysStatus > 0);
if (category_id.HasValue)
ps = ps.Where(p => p.Categories.Where(c => c.Id == category_id.Value).FirstOrDefault() != null);
它的工作原理,但我認爲這是一個有點髒的方式:-)
它給我下面的SQL查詢(我已經去除了多餘的列字符串):
SELECT
[Project2].[Id] AS [Id]
FROM (SELECT
[Extent1].[Id] AS [Id],
(SELECT TOP (1)
[Extent3].[CategoryId] AS [CategoryId]
FROM [dbo].[CategoryLink] AS [Extent3]
WHERE ([Extent1].[Id] = [Extent3].[PodcastId]) AND ([Extent3].[CategoryId] = 1)) AS [C1]
FROM [dbo].[Podcast] AS [Extent1]
INNER JOIN [dbo].[PodcastStatus] AS [Extent2] ON [Extent1].[StatusId] = [Extent2].[Id]
WHERE [Extent2].[SysStatus] > 0
) AS [Project2]
WHERE [Project2].[C1] IS NOT NULL
的querstion是怎麼做的查詢,所以我可以得到一個「正常」 inner join
無子查詢?
謝謝。
這只是houw EF建立查詢,沒有太多可以做的。 EF非常快速地使用子查詢。在一天結束時,執行計劃就是最重要的。我認爲這應該是可以的,因爲事實上,WHERE部分([Extent1]。[Id] = [Extent3]。[PodcastId])'是內連接。 –