Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 4 EF4级联左外联接空异常_Entity Framework 4 - Fatal编程技术网

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添加了一个手动执行外部连接的示例。它需要更多的按键才能达到同样的效果!!