1

データベースに 1:N の関係で 2 つのテーブルがあり、熱心な読み込みで左結合クエリを実行したいと考えています。

私のテーブルは次のとおりです。

  • ビデオ (IDビデオ、名前...)
  • バージョン (IDVersion、IDVideo、Name、Avaliable...)

ビデオには多くのバージョン (DVD、Blu-Ray など) を含めることができ、バージョンはビデオにのみ属することができます。

少なくとも 1 つの利用可能なバージョンがあるすべてのビデオを取得したいと考えています (おそらく、一部のバージョンは 1 人の友人が所有しています)。

少なくとも利用可能なバージョンを持つすべてのビデオを取得したいのですが、このビデオのうち、利用可能なバージョンと利用できないすべてのバージョンが必要です。

したがって、最初のステップは、少なくとも 1 つの利用可能なバージョンを持つすべてのビデオを知ることであり、2 番目のステップは、すべてのビデオとそのすべてのバージョン (利用可能なものと利用できないもの) を取得することです。

生のSQLでそれをしたいのですが、生のSQLで熱心な読み込みを使用することができない方法は、linqを使用したいと思います。

データベースへのクエリを 1 つだけ使用し、多くは使用しないように熱心な読み込みを使用したいと考えています。これは、ビデオ エンティティのコレクション バージョンにそのバージョンを入力したいためです。

ありがとう。

4

1 に答える 1

1

LINQ を使用したソリューションはかなり単純で、次のようになります。

var videos = context.Videos
    .Include(v => v.Versions)
    .Where(v => v.Versions.Any(vers => vers.Available))
    .ToList();

これに生の SQL が本当に必要な場合は、次の LINQ クエリから SQL を抽出できます。

var sql = context.Videos
    .Include(v => v.Versions)
    .Where(v => v.Versions.Any(vers => vers.Available))
    .ToString();

編集

ほとんどの場合、未加工の SQL を使用したクエリはナビゲーション プロパティを設定しないため、熱心な読み込みに使用することはできないようです。回答とそのコメントで、ここでの議論を参照してください。

于 2013-07-28T10:16:10.577 に答える