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
。