Ich habe die folgenden TabellenEntity Framework Include mit Links Join ist das möglich?
- Classroom (ClassID, Classname)
- StudentClass (StudentID, ClassID)
- Student (StudentID, student, etc ..)
- StudentDescription. (StudentDescriptionID, StudentID, StudentDescription)
Ich möchte alle Informationen auf Schüler == abrufen 1
in SQL ich so etwas wie BELOW tun würde, und alle Informationen über einen Schüler bekommen.
Jetzt mein Problem. Unter Verwendung von EF4 habe ich so etwas getan, aber kann es nicht funktionieren. Auch können Sie eine Include und ein LEFT JOIN
Versuch 1
private static StudentDto LoadStudent(int studentId)
{
StudentDto studentDto = null;
using (var ctx = new TrainingContext())
{
var query = ctx.Students
.Include("ClassRooms")
.Include("StudentDescriptions")
.Where(x=>x.StudentID==studentId)
.SingleOrDefault();
studentDto = new StudentDto();
studentDto.StudentId = query.StudentID;
studentDto.StudentName = query.StudentName;
studentDto.StudentDescription = ??
}
return studentDto;
}
Versuch 2 wieder unvollständig und falsch
using (var ctx = new TrainingContext())
{
var query = (from s in ctx.Students
.Include("ClassRooms")
join sd in ctx.StudentDescriptions on s.StudentID equals sd.StudentID into g
from stuDesc in g.DefaultIfEmpty()
select new
{
Name=s.StudentName,
StudentId=s.StudentID,
}).SingleOrDefault();
Wie Sie sehen Ich weiß nicht, was ich hier tue. Wie kann ich diese SQL in eine EF-Abfrage konvertieren?
danke für Ihre Zeit und antworten. Das Beispiel einbezieht funktioniert !! aber die erste erzeugt einen Kreuz-Join. Ich könnte total falsch sein, aber wenn du 2 Froms tust erzeugt das nicht einen Cross-Join? – user9969
Ich habe diese Aussage nicht verstanden: "Erstens, .Include tut eine LINKE OUTER JOIN,". Soweit ich das beurteilen kann .Include führt einen INNEREN JOIN durch. – Dror
Nein, '' .Include'' hat einen OUTER JOIN. Wenn Sie eine Eigenschaft einschließen, die zufällig leer ist (nicht vorhanden), wird die ursprüngliche zurückgegeben. –