Ich versuche links drei Tabellen mit LINQ verbinden. Ich habe arbeiten die SQL wie folgt:Wie links Join mehrere Tabellen mit LINQ
Select j.Id, u.FirstName , u.LastName, u.Role
From Job j
left join JobTranslator as jt on j.Id = jt.JobId
left join JobRevisor as jr on j.Id = jr.JobId
left join [User] as u on jt.UserId = u.Id OR jr.UserId = u.Id
Where u.Id = someID;
ich es bekommen kann mit zwei arbeiten wie unten schließt sich:
IQueryable<Job> jobs =
from j in _db.Jobs
join jr in _db.JobRevisors on j.Id equals jr.JobId into jrs
from jrResult in jrs.DefaultIfEmpty()
join u in _db.Users on jrResult.UserId equals u.Id into jrU
from jrUResult in jrU.DefaultIfEmpty()
where jrUResult.Id == userId
orderby j.Id
select j;
Aber wenn ich versuche, meine letzte benötigte Tabelle beitreten es funktioniert nicht wie unten.
IQueryable<Job> jobs =
from j in _db.Jobs
join jt in _db.JobTranslators on j.Id equals jt.JobId into jts
from jtResult in jts.DefaultIfEmpty()
join jr in _db.JobRevisors on jtResult.Id equals jr.JobId into jrs
from jrResult in jrs.DefaultIfEmpty()
join u in _db.Users on jrResult.UserId equals u.Id into jrU
from jrUResult in jrU.DefaultIfEmpty()
join u in _db.Users on jtResult.UserId equals u.Id into jtU
from jtUResult in jtU.DefaultIfEmpty()
where jtUResult.Id == userId
orderby j.Id
select j;
Irgendwelche Ideen von irgendjemandem?
Mögliche Duplikat [LEFT OUTER JOIN in LINQ] (http://stackoverflow.com/questions/3404975/left-outer-join-in-linq) – Win
Vielleicht ist das umbenennen zweites 'u' zu etwas anderem? – Quentin
Was ich nicht verstehe ist, warum Entwickler darauf bestehen, das SQL wortwörtlich in LINQ zu übersetzen, anstatt Navigationseigenschaften, Sammlungen und '.Include()' zu verwenden. In der Regel ergibt sich auf diese Weise ein intuitiver verwendbares Objektdiagramm. –