where代わりに使用できますjoin:
from a in Proposals
join b in Proposal_Minions on a.ID equals b.Proposal_ID
from c in Users
where a.PI_User_ID == c.ID || a.Creator_User_ID == c.ID || b.User_ID == c.ID
select new { a, b, c }
ただし、これは と同等ですINNER JOIN。によって外部結合効果を得ることができます
from a in Proposals
join b in Proposal_Minions on a.ID equals b.Proposal_ID into j
from pm in j.DefaultIfEmpty()
select new { a,
pm,
c = (from c in Users
where a.PI_User_ID == c.ID
|| a.Creator_User_ID == c.ID
|| pm.User_ID == c.ID
select c).FirstOrDefault()
}
Proposalあなただけができるsを選択したいので
from a in Proposals
join b in Proposal_Minions on a.ID equals b.Proposal_ID into j
from pm in j.DefaultIfEmpty()
where Users.Any(u => a.PI_User_ID == u.ID
|| a.Creator_User_ID == u.ID
|| pm.User_ID == u.ID)
select a
しかし、これはもはや外部結合ではありませんUsers。一方、両方の外部結合は、Usersとにかくすべてが選択されるProposal_Minionsため、フィルターの目的を無効にします。Proposalsこれは、 の外部結合にも当てはまりますProposal_Minions。