下面是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});