【问题标题】:trying to get the left outer join with linq expresssion using multiple tables in C#尝试使用 C# 中的多个表使用 linq 表达式获取左外连接
【发布时间】:2015-09-21 02:29:43
【问题描述】:

我正在尝试使用 linq 从左外连接获取结果集。下面是我的sql语句

select
    cra.room_number,HERS_SCHEDULE_ID,hs.HES_AVAILABLE_DATE,USERS.USER_FNAME
from coded_room cra
left outer join HE_REGULAR_SCHEDULE hrs 
    on  cra.room_number = hrs.hers_room_number
left outer join HE_SCHEDULE hs 
    on hs.HES_SCHEDULE_ID= hrs.HERS_SCHEDULE_ID
left outer join USERS 
    on hs.HES_HE_ID = USERS.USER_ID
where cra.ROOM_borough_id = 3

输出

room_number HERS_SCHEDULE_ID    HES_AVAILABLE_DATE         USER_FNAME
 1          285                 2015-09-18 00:00:00.000    john
 2          287                 2015-09-18 00:00:00.000    david
 3          NULL                NULL                       NULL

我使用 Linq 的尝试

from  coded_room cr in Context.coded_room
join hereg in Context.HE_REGULAR_SCHEDULE on cr.room_number equals hereg.HERS_ROOM_NUMBER   into leftjoin1
from x in   leftjoin1.DefaultIfEmpty()
join he in Context.HE_SCHEDULE on x.HERS_SCHEDULE_ID  equals he.HES_SCHEDULE_ID into leftjoin2
from y in leftjoin2.DefaultIfEmpty()
join userlinq in Context.USERS on y.USERS.USER_ID equals  userlinq.USER_ID  into leftjoin3
from z in leftjoin3.DefaultIfEmpty()
where cr.ROOM_borough_id == borough && y.HES_AVAILABLE_DATE == d                                   
select new HE_SCHEDULEDTO { RoomNumber = cr.room_id,UserName = z.USER_LNAME};

我的 Linq 的输出

room_number HERS_SCHEDULE_ID    HES_AVAILABLE_DATE        USER_FNAME
  1                285          2015-09-18 00:00:00.000   john
  2                287          2015-09-18 00:00:00.000   david

我想要什么?

我想要一些指针来修改上面的 linq 查询以给出输出。请参阅上面的sql查询以供参考

 room_number    HERS_SCHEDULE_ID    HES_AVAILABLE_DATE         USER_FNAME
 1              285                 2015-09-18 00:00:00.000    john
 2              287                 2015-09-18 00:00:00.000    david
 3              NULL                NULL                       NULL

【问题讨论】:

  • y.HES_AVAILABLE_DATE == d 在这一行中,您携带的是日期。我猜你必须在 Where 子句中携带当前日期作为过滤器。现在日期不能等于 null 所以要么是 MinDateMaxdate 要么简单的 Date 因此您没有将第三行设为 null

标签: c# asp.net sql-server linq


【解决方案1】:

您提供的日期条款不包括房间 3 行,因为有一个空日期值。运行下面确认:

where cr.ROOM_borough_id == borough

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多