2017-06-29 4 views
-3

ich die folgende LINQ-AbfrageSQL Outer Join in LINQ

from s in db.tblSave 
join a in db.tblAssessment on s.AssessmentID equals a.Id 
join staff in db.tblStaff on s.StaffID equals staff.Id 
join student in db.tblStudent on s.StudentID equals student.Id 
join signed in db.tblSaveSigned on s.Id equals signed.SaveID 
select new 
{ 
SaveID = s.Id, 
StaffName = staff.StaffName, 
AssessmentName = a.AssessmentName, 
StudentName= student.StudentName, 
CreatedDate = s.CreatedDate, 
SignedDate = signed.SignedDate} 

tblSaveSigned haben keinen Datensatz gegen tblSave haben, die einige tblSave Aufzeichnungen ist ohne. Wie schließe ich alle tblSave-Datensätze in meine Ergebnisse ein? Es ist eine äußere Verknüpfung in SQL, aber nicht sicher, wie es in LINQ zu tun ist.

Vielen Dank im Voraus.

Gibt es ein SQL zu LINQ-Tool?

+0

Ja! LinqPad usw. –

+0

Ich habe LinqPad 5, die kostenlose Version und kann es nicht sehen? Ich weiß, dass es LINQ to SQL, aber nicht das Gegenteil finden kann. – SliderUK

+0

LINQPad kann Ihnen helfen, zu sehen, was mit Ihrem LINQ nicht stimmt. Ihr LINQ in Ihrer Frage ist unvollständig, ohne den Rest der Abfrage ist es schwer zu sagen, wie es weitergehen soll, aber im Allgemeinen fügen Sie etwas wie 'in signedj from signed in signj.DefaultIfEmpty()' hinzu – NetMage

Antwort

0

Unten ist die richtige LINQ-Abfrage für FULL OUTER JOIN auf TblSave für TblSaveSigned. Danke für NetMage, dass er mich in die richtige Richtung weist.

from s in db.tblSave 
join a in db.tblAssessment on s.AssessmentID equals a.Id 
join staff in db.tblStaff on s.StaffID equals staff.Id 
join student in db.tblStudent on s.StudentID equals student.Id 
join signed in db.tblSaveSigned on s.Id equals signed.SaveID into signedj 
from signed in signedj.DefaultIfEmpty() 
select new 
{ 
SaveID = s.Id, 
StaffName = staff.StaffName, 
AssessmentName = a.AssessmentName, 
StudentName= student.StudentName, 
CreatedDate = s.CreatedDate, 
SignedDate = signed.SignedDate} 
+0

Nächste Herausforderung: Graben Sie die Joins und verwenden Sie Navigationseigenschaften. –

+0

Beachten Sie, dass es sich eigentlich um einen LINKEN ÄUSSEREN JOIN von (tblSave join tblAssessment join tblStaff join tblStudent join tblSaveSigned) zu signedj handelt. Ein FULL OUTER JOIN würde alle Datensätze in signedj enthalten, selbst wenn in tblSave keine Übereinstimmung vorhanden wäre. – NetMage