Podcast、Category、CategoryLinkの3つのテーブルを作成しました。CategoryLinkテーブルには、PodcastIdとCategoryIdの2つの列のみが含まれます。この記事で書いたように、これらのテーブル間の多対多の関係について説明しました。すべて正常に動作しますが、クエリを正しく行う方法がわかりません。今、私は次の方法でこれを行います:
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
問題は、サブクエリなしで「通常」を取得できるようにクエリを実行する方法inner join
です。
ありがとう。