Let JOIN sagen, ich habe:Kettenselect anstelle der Verwendung einer Anweisung
Ich habe alle Klassen finden, die zu einer bestimmten Schule gehören (IdSchool = 2) und die von der Wissenschaft zum Beispiel ist .
Anyways, weil ich finde LINQ sehr EASSy zu verwenden, ich mache:
using(var context = new MyEntities())
{
var classesOfInterest = context.Schools
.SelectMany(x => x.Teachers)
.SelectMany(x => x.Classes)
.Where(x => /* custom criteria */)
.ToList();
}
Also meine Frage ist: Ist mit diesem Ansatz instad der Verwendung einer Anweisung schlechte Praxis kommen? Soll ich stattdessen eine JOIN-Anweisung verwenden? Es gibt Fälle, in denen ich 5 "SelectMany" -Anweisungen ketten. Im Moment funktioniert es gut, weil die Datenbank klein ist. Wenn ich mit einer großen Datenbank arbeiten soll, sollte ich das vermeiden?
Ich würde erwarten, dass die Ausführung der übersetzten SQL-Abfrage mit der 'SelectMany'-Methode viel langsamer ist. Ich würde definitiv Joins verwenden. Aber nimm mein Wort nicht dafür. Protokollieren Sie das generierte SQL, vergleichen Sie die Ausführungspläne und sehen Sie selbst. – sstan
Danke @Sstan. Die Ergebnisse sind sehr ähnlich. Ich denke, ich muss dies erneut versuchen, eine große Datenbank und vergleichen Sie die Ergebnisse wie Sie sagen. Es wäre schön, wenn ich es mit SelectMany verketten könnte. Es ist so schneller, die Abfragen so zu erstellen. –
Eigentlich ist dies der bevorzugte EF-Ansatz. EF verwendet die Metainformationen der "navigation" -Eigenschaften, um die Joins für Sie zu generieren. –