下面是mysql多表左连接,对应的lambda表达式写法,只为快速解决你的问题,详细的就不介绍了,只出结果,相信稍微有点基础的都能看懂。相关知识点,请自行百度
关键字:GroupJoin、SelectMany
sql语句表达方式:
对应的
lambda表达方式
sql语句:
SELECT
A.psd_id,A.wo_nbr,A.creation_time,A.wo_customer_part,B.psd_qty_ord,A.net_num,A.report_num,C.user_code,C.user_name,A.machine_code
FROM mes_material_down_rd AS A
LEFT JOIN mes_sync_psd_det AS B ON A.psd_id=B.psd_id AND A.op=B.psd_op AND A.work_id=B.psd_work_id /**/
LEFT JOIN mes_busi_team_user AS C ON A.user_id=C.user_id
WHERE A.is_deleted=0 AND A.creation_time>='2021-11-01 00:00:00' AND A.creation_time<='2021-12-01 00:00:00'
ORDER BY A.creation_time DESC;
lambda语句:
var query = _materialDownRdRepo
.WhereIf(!string.IsNullOrWhiteSpace(body.MachineName), d => d.MachineCode == body.MachineName)
.WhereIf(body.BeginTime.HasValue, d => d.CreationTime >= body.BeginTime.Value)
.WhereIf(body.EndTime.HasValue, d => d.CreationTime <= body.EndTime.Value)
.WhereIf(!string.IsNullOrWhiteSpace(body.PsdId), d => d.PsdId == body.PsdId)
.WhereIf(!string.IsNullOrWhiteSpace(body.WoNbr), d => d.WoNbr == body.WoNbr)
;
var queryNew = query.GroupJoin(
_psdDetRepo.AsQueryable()
, l => new { a = l.PsdId, b = l.Op.ToString(), c = l.WorkId }
, r => new { a = r.PsdId, b = r.PsdOp, c = r.PsdWorkId }
, (l, r) => new { l, r })
.SelectMany(lr => lr.r.DefaultIfEmpty(), (lr, r) => new
{
lr.l,
r.PsdQtyOrd
})
.GroupJoin(_busiTeamUser.AsQueryable(), l => l.l.UserId, r => r.UserId, (l, r) => new { l, r })
.SelectMany(lr => lr.r.DefaultIfEmpty(), (lr, r) => new
{
lr.l.l,
lr.l.PsdQtyOrd,
r.UserCode,
r.UserName
});