C# Linq到实体左连接返回0条记录
我正在将两个linq查询压缩为一个查询。基本上,我试图通过以下查询获得与用户相关的所有信息,而不管他们是否有订单 正如我目前编写的查询一样,只要传递给方法的用户id至少有一个顺序,它就可以完美地工作 据我所知,C# Linq到实体左连接返回0条记录,c#,linq,entity-framework,C#,Linq,Entity Framework,我正在将两个linq查询压缩为一个查询。基本上,我试图通过以下查询获得与用户相关的所有信息,而不管他们是否有订单 正如我目前编写的查询一样,只要传递给方法的用户id至少有一个顺序,它就可以完美地工作 据我所知,.DefaultIfEmpty()相当于linq的SQL左联接,但是下面的查询将为尚未下单的任何用户返回0记录 查询 var orders = (from u in db.people where u.id == UserId join o in
.DefaultIfEmpty()
相当于linq的SQL左联接,但是下面的查询将为尚未下单的任何用户返回0
记录
查询
var orders = (from u in db.people where u.id == UserId
join o in db.product_transactions.DefaultIfEmpty() on u.id equals o.user_id
join sta in db.order_statuses.DefaultIfEmpty() on o.order_status equals sta.id
join ship in db.shipping_types.DefaultIfEmpty() on o.shipping_type equals ship.shipping_id
select new { o, u, sta, ship }).ToList();
有两种方法可以创建左连接 1) 使用
进入
和从
join o in db.product_transactions on u.id equals o.user_id into og
from o in og.DefaultIfEmpty()
2) 使用中的和其中的
from o in db.product_transactions.Where(x => u.id == x.user_id).DefaultIfEmpty()
.DefaultIfEmpty()
不是左连接语法.DefaultIfEmpty()
是左连接语法的一部分,如果单元格为空,它将为您提供默认值
,注意输入和输出
var query = from person in people
join pet in pets on person equals pet.Owner into gj
from subpet in gj.DefaultIfEmpty()
select new { person.FirstName, PetName = (subpet == null ? String.Empty : subpet.Name) };