C# Linq到实体左连接返回0条记录

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

我正在将两个linq查询压缩为一个查询。基本上,我试图通过以下查询获得与用户相关的所有信息,而不管他们是否有订单

正如我目前编写的查询一样,只要传递给方法的用户id至少有一个顺序,它就可以完美地工作

据我所知,
.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) };