具有多个条件的Linq左外连接

具有多个条件的Linq左外连接,linq,linq-to-entities,linq-to-objects,Linq,Linq To Entities,Linq To Objects,我是新来的Linq。我试图在mssql中查询一些数据 以下是我的声明: select * from booking left outer join carpark on booking.bookingId = carpark.bookingId where userID = 5 and status = 'CL' 当我在mssql中运行它时,我得到了预期的结果。如何在Linq中执行此操作 谢谢您的帮助。您可以尝试通过以下方式进行左键连接: from t1 in tb1 from t2

我是新来的
Linq
。我试图在
mssql
中查询一些数据

以下是我的声明:

select * from booking
left outer join carpark
    on booking.bookingId = carpark.bookingId
where userID = 5 and status = 'CL'
当我在
mssql
中运行它时,我得到了预期的结果。如何在
Linq
中执行此操作


谢谢您的帮助。

您可以尝试通过以下方式进行左键连接:

from t1 in tb1
from t2 in tb2.Where(o => o.tb1pKey == t1.pKey).DefaultIfEmpty()
where tb1.userId == 5 && tb1.status == "CL"
select t1;

通常,当人们说他们想要一个“左外连接”时,那只是因为他们已经在头脑中将他们真正想要的转换成了SQL。通常他们真正想要的是表A中的所有项目,以及从表B中获取相关项目(如果有)的能力

假设您的导航属性设置正确,这可能非常简单:

var tb1sWithTb2s = context.tb1
    .Include(t => t.tb2s)       // Include all the tb2 items for each of these.
    .Where(t => t.userID == 5 and t.status = "CL");
你需要这个:

var query = (from t1 in tb1
             join t2 in tb2 on t1.pKey = t2.tb1pKey into JoinedList
             from t2 in JoinedList.DefaultIfEmpty()
             where t1.userID == 5 && t1.status == "CL"
             select new 
             {
                  t1,
                  t2
             })
             .ToList();

使用LINQ进行左外连接是StackOverflow上的一个常见问题。尝试一下,你会发现很多例子。