【发布时间】:2012-11-14 14:57:31
【问题描述】:
我有这个代码:
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 });
这很好用,作为具有(可选)地址的人的外部连接。
现在我想通过内部连接将地址类型加入到这个查询中,因为每个地址都只有一个地址类型。 所以对于每个人,获取地址,如果有地址,也获取地址类型。
所以我创建了这个(将内部连接添加到地址类型):
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/bar)
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()
这不是和你的评论一样,'pa'超出范围,这不是这段代码中的'bar'
【问题讨论】:
-
我很惊讶,即使编译 - 你不应该在后面的代码中使用
addresses而不是pa吗?pa不再在范围内。 -
我已经编辑了问题
标签: linq linq-to-entities