レッツを使用して、私が持っていると言う:チェーンSelectManyの代わりにJOINステートメント
私は特定の学校(IdSchool = 2)に属しているすべてのクラスを見つけなければならないし、例えば科学からであること。とにかく
私は私が使用してLINQは非常にeassy見つけるため:
using(var context = new MyEntities())
{
var classesOfInterest = context.Schools
.SelectMany(x => x.Teachers)
.SelectMany(x => x.Classes)
.Where(x => /* custom criteria */)
.ToList();
}
だから私の質問は次のとおりです。は、結合文悪い習慣を使用して、このアプローチinstadを使用していますか?代わりにJOIN文を使用する必要がありますか? 5つの「SelectMany」ステートメントをチェーン化するケースがあります。今はデータベースが小さいのですごくうまくいきます。大きなデータベースで作業する場所をこのようなものにすると、私は避けるべきですか?
翻訳されたSQLクエリの実行が 'SelectMany'アプローチではるかに遅くなると思います。私は間違いなく結合を使用します。しかし、私の言葉をそれに服用しないでください。生成されたSQLをログに記録し、実行計画を比較し、自分で参照してください。 – sstan
ありがとう@sstan。結果は非常に似ています。私は大規模なデータベースを試してみる必要があり、あなたが言うように結果を比較する必要があると思います。私がSelectManyを使ってチェーンすることができればいいです。そのようにクエリを作成するのが早いです。 –
これは実際にはEFの推奨アプローチです。 EFは、 "ナビゲーション"プロパティのメタ情報を使用して結合を生成します。 –