最初にすべてのリレーションシップオブジェクトをメモリにロードせずに、多対多のリレーションシップをクエリするための最良の方法を知りたいです。
たとえば、カテゴリと記事には多対多の関係があります。これは、Categoryクラスに(遅延読み込みされた)ナビゲーションプロパティがあることを意味します。
class Category
{
public long Id {get; set;}
public ICollection<Articles> Articles {get; set;}
}
表示されている記事のみを選択したい場合は、次のようにナビゲーションプロパティをクエリできます。
category.Articles.Where(a => a.IsVisible)
ただし、私が知る限り、これにより、IsVisibleチェックを実行する前に、関連するすべての記事がメモリに読み込まれます。
関連する記事をメモリにロードせずにクエリすることは可能ですか?つまり、ICollectionではなくIQueryableに作用しますか?これが1対多の関係である場合、Article DbSetに直接クエリを実行して目的を達成できますが、多対多の関係はsqlのリンクテーブルに格納されます。つまり、DbSetを使用してこれをクエリすることはできません。リンクテーブルをクエリする生のSQLを手動で作成する唯一のオプションはありますか?