我有这样的代码:LINQ到实体外连接,然后内部联接
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 });
这个工程很好,作为一个外连接他们的(可选)地址的人。
现在我想加入这个带有内部联接的查询的addresstype,因为每个地址都只有一个addresstype。 因此,对于每个人来说,得到地址,如果有地址,也可以获得地址类型。
所以我创造了这个(增加了内部连接到地址类型):
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()
join at in dc.GetTable<AddressTypes>() on pa.addresstypeid equals at.addresstypeid
select new { p.FirstName, p.LastName, addresses.State, at.addresstype });
现在我得到的当人没有地址的pa.addresstypeid的空引用错误....
有没有办法在linq中创建这个?
上面的代码的行为酷似我的代码,但我的代码有不同的实体,但我不能表现出实际的代码...
编辑:
这里是我的代码示例实际上作品(替换FOO /栏中表)
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()
那不是相同您评论即扩声'超出范围不是在这次“酒吧”代码
我很惊讶,甚至编译 - 你不应该使用'addresses'而不是' pa'在后面的代码中? 'pa'不在范围之内。 –
我编辑了这个问题 – Michel