Linq左外连接有多个条件

时间:2014-03-22 21:50:01

标签: linq linq-to-entities linq-to-objects

我是Linq的新手。我正在尝试查询MS SQL中的一些数据。

以下是我的发言:

select * from booking
left outer join carpark
    on booking.bookingId = carpark.bookingId
where userID = 5 and status = 'CL'

当我在MS SQL中运行时,我得到了预期的结果。我怎样才能在Linq

中执行此操作

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

你需要这个:

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();

答案 1 :(得分:0)

您可以尝试以这种方式进行左连接:

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

答案 2 :(得分:0)

通常当人们说他们想要一个“左外连接”时,这只是因为他们已经将他们真正想要的东西转换成了他们脑中的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");