Linq到实体的外部连接,然后是内部连接

Linq到实体的外部连接,然后是内部连接,linq,linq-to-entities,Linq,Linq To Entities,我有以下代码: var query = (from p in dc.GetTable<Person>() join pa in dc.GetTable<PersonAddress>() on p.Id equals pa.PersonId into tempAddresses from addresses in tempAddresses.DefaultIfEmpty() select new { p.FirstName, p.LastName, addresses.St

我有以下代码:

var query = (from p in dc.GetTable<Person>()
join pa in dc.GetTable<PersonAddress>() on p.Id equals pa.PersonId into tempAddresses
from addresses in tempAddresses.DefaultIfEmpty()
select new { p.FirstName, p.LastName, addresses.State });

这与您的评论中的“pa”不在范围内,是不是在您将
用于
后,此代码中的“bar”不在范围内

改变

on pa.addresstypeid equals


我很惊讶,即使是编译,你不应该在后面的代码中使用
地址而不是
pa
pa
已不在范围内。我编辑了这个问题,这可能意味着原始代码不准确-它并没有真正回答问题。@JonSkeet-说得好。随着问题的发展,我将逐步给出我的答案
from foo in foos
join bar in new barRepository(SessionTicket).GetList()
    on foo.barId equals bar.barId
join barpersonbar in new barPersonbarRepository(SessionTicket,personId).GetList().Where(z=>z.PersonId == personid)
    on bar.barId equals barpersonbar.barId
    into outerbarpersonbar
from barpersonbar in outerbarpersonbar.DefaultIfEmpty()
on pa.addresstypeid equals
on addresses.addresstypeid equals