2017-06-29 87 views
-3

我有以下LINQ查询SQL外连接在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可能没有对tblSave记录,是除一些tblSave记录。我如何在结果中包含所有tblSave记录?这是SQL中的外连接,但不知道如何在LINQ中完成。

在此先感谢。

是否有LINQ工具的SQL?

+0

是啊! LinqPad等 –

+0

我有LinqPad 5,免费版本,看不到它?我知道它执行LINQ to SQL,但无法找到相反的结果。 – SliderUK

+0

LINQPad可以帮助您查看您的LINQ出了什么问题。你的问题中的LINQ是不完整的,没有其余的查询很难说如何继续,但总的来说,你可以在签名signj.DefaultIfEmpty()'中加入'signedj'' – NetMage

回答

0

以下是在tblSave for tblSaveSigned上放置FULL OUTER JOIN的正确LINQ查询。感谢NetMage为我指出了正确的方向。

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

下一个挑战:沟通连接并使用导航属性。 –

+0

请注意,实际上是从(tblSave连接tblAssessment连接tblStaff连接tblStudent连接tblSaveSigned)到signedj的LEFT OUTER JOIN。即使tblSave中没有匹配,完全外部联接也会包含signedj中的所有记录。 – NetMage