Wenn ich Ihre Frage nicht missverstehen, möchten Sie wissen, wie Sie die Frage der Frage als LINQ-to-Entity
Anfrage schreiben.
Beispiele könnten sein:
var courses = context.Courses
.Where(c => c.Reservations.All(r => r.idStudent != "value"))
.Select(c => c);
// with eager loading
var courses = (from c in context.Courses.Include(c => c.Reservations)
where c.Reservations.All(r => r.idStudent != "value")
select c).ToArray();
var courses = (from c in context.Courses
join r in context.Reservations on c.idCourse equals r.idCourse
where r => r.idStudent != "value"
select c).ToArray();
Die Contains()
ist EXIST IN
in einer Abfrage gleichwertig. Nun, 1. und 2. fast gleich. Einziger Unterschied ist die Include
Methode, um zu zeigen, wie Sie eifrig laden konnten Daten. In der dritten Abfrage verwende ich das Join-Schlüsselwort, um eine Join-Operation durchzuführen - das entspricht einer INNER JOIN
. Das Ergebnis enthält nur Datensätze, bei denen eine Beziehung zwischen einem Kurs und einer Reservierung besteht und auf die gesuchte Studenten-ID in der Reservierung verwiesen wird.
Wenn Sie LINQ nicht für Ihre Abfragen verwenden sollten, sollten Sie einen Blick darauf werfen. Dies ist eine perfekte Methode, um Ihre Datenzugriffsebene von der Persistenzschicht zu trennen, und Sie können alle Abfragen auch im Code testen.
Here konnten Sie einen sehr guten Einstieg in das Thema bekommen.
EDIT: Modifizierter Beispielcode passend zu NOT IN
.
werden Sie einen Fehler erhalten? –
Ich würde dieses Tutorial für alles über 'EntityFramework' empfehlen: http://www.entityframeworktutorial.net/Query-with-EDM.aspx. –