Entity framework 4 EF4级联左外联接空异常
我有这个疑问Entity framework 4 EF4级联左外联接空异常,entity-framework-4,Entity Framework 4,我有这个疑问 Select p.Name,p.Street from person p left join address a on a.address_id = p.address_id left join Order o on o.order_id = a.order_id 但当我尝试将其转换为LINQ查询时 var q = from p in Entities.Person from a in Entities.Address.Where(a=>a.address
Select p.Name,p.Street from person p
left join address a on a.address_id = p.address_id
left join Order o on o.order_id = a.order_id
但当我尝试将其转换为LINQ查询时
var q = from p in Entities.Person
from a in Entities.Address.Where(a=>a.address_id == p.address_id).DefaultIfEmpty()
from o in Entities.Order.Where (o=>o.order_id== a.order_Id).DefaultIfEmpty()
我得到了一个Null异常,因为对于某些address\u id的组合,没有地址,它在o=>o.order\u id==a.order\u id子句中爆炸(因为a是Null)
请让我知道如何在EF 4中以正确的方式进行多个左连接
谢谢 如果建模正确,则无需显式执行左外联接
Select p.Name, a.Street from person p
left join address a on a.address_id = p.address_id
left join Order o on o.order_id = a.order_id
上述查询可以按如下方式转换
var projection = Entities.Person.Select(p => new {p.Name, p.Address.Street});
var projection = from p in Entities.Person
join a in Entities.Address on p.address_id equals a.address_id into outer
from a in outer.DefaultIfEmpty()
select new {p.Name, a.Street};
EF将自动添加联接以检索字段
您可以按如下方式手动执行联接
var projection = Entities.Person.Select(p => new {p.Name, p.Address.Street});
var projection = from p in Entities.Person
join a in Entities.Address on p.address_id equals a.address_id into outer
from a in outer.DefaultIfEmpty()
select new {p.Name, a.Street};
谢谢那么,你是说没有办法像我那样编写代码来实现这个目标吗?Bcos你可以看到,我也需要使用Order表和address表进行左连接。@user636525添加了一个手动执行外部连接的示例。它需要更多的按键才能达到同样的效果!!