我在SQL中有这个查询,我希望它在LINQ中使用Entity Framework实现它,但是我如何应用多个表的左外联接呢?

SELECT d.bookingid,
       d.labid,
       d.processid,
       p.prid,
       p.prno,
       d.DestinationBranchID,
       d.SendStatus
FROM   dc_tpatient_bookingd d
       LEFT OUTER JOIN dc_tpatient_bookingm m ON d.bookingid = m.bookingid
       LEFT OUTER JOIN dc_tpatient p ON p.prid = m.prid
       LEFT OUTER JOIN dc_tp_test t ON d.testid = t.testid
       LEFT OUTER JOIN dc_tp_groupm gm ON t.groupid = gm.groupid
       LEFT OUTER JOIN dc_tpanel pn ON m.panelid = pn.panelid
       LEFT OUTER JOIN dc_tp_organization og ON og.orgid = m.clientid
       LEFT OUTER JOIN dc_tp_ward w ON w.wardid = m.wardid
       LEFT OUTER JOIN dc_tp_branch tb ON tb.BranchID = m.BranchID
WHERE  d.processid = 6
       AND ( ( m.branchId = 1
               AND d.DestinationBranchID = 0 )
              OR ( d.DestinationBranchID = 1
                   AND d.sendstatus = 'R' ) )
       AND d.testid IN (SELECT testid
                        FROM   dc_tp_test
                        WHERE  subdepartmentid = 13)
       AND date_format(m.enteredon, '%Y/%m/%d') BETWEEN '2013/06/15' AND '2013/06/15'
GROUP  BY m.bookingid
ORDER  BY d.priority DESC,
       m.bookingid ASC

推荐答案

下面是如何使用LINQ实现左外连接.您应该使用GroupJoin(join...into语法):

from d in context.dc_tpatient_bookingd
join bookingm in context.dc_tpatient_bookingm
     on d.bookingid equals bookingm.bookingid into bookingmGroup
from m in bookingmGroup.DefaultIfEmpty()
join patient in dc_tpatient
     on m.prid equals patient.prid into patientGroup
from p in patientGroup.DefaultIfEmpty()
// ... other joins here
where d.processid == 6 &&
      ((m.branchId == 1 && d.DestinationBranchID == 0) ||
       (d.DestinationBranchID == 1 && d.sendstatus == "R"))
// ... other conditions here
orderby d.priority descending, m.bookingid
select new {
   d.bookingid,
   d.labid,
   d.processid,
   p.prid,
   p.prno,
   m.bookingid // need for grouping
} into x
group x by x.bookingid into g
select g

此查询连接三个表.你可以用同样的方法连接其余的表.

Mysql相关问答推荐

添加日期日期,而不使用addDate

在SQL中,复合索引最左边的前置是否与非复合索引一样性能?

在MySQL中从非连续数据创建时间线

SQL - Select 复合主键,条件为其中一个主键

默认情况下,MariaDB是否限制为本地主机?

MySQL逻辑全部

计算符合字段值只能包含一种事件类型这一事实的记录

多列分组并进行求和

获取每个参数的记录,不重复

MySQL 关于 JSON 数组和子查询的问题

将时间戳四舍五入到最接近的半小时而不遗漏丢失的数据

排序子查询结果并返回每个 ID 的第一行

如何使用等于、喜欢和不等于在 json 字段上编写查询?

在 MySQL 中使用非空条件 LAG() 函数

当查询 MySQL 的 goroutine 过多时,Go 会出现panic

如何解决这个特定的 SQL 查询?我的解决方案还返回不想要的值

MySQL使用多列 Select 重复记录

索引和多列主键

用户 'User'@'%' 和 'User'@'localhost' 不一样吗?

MySQL导入数据库但忽略特定表