LINQ Lambda左联接与内联接 [英] LINQ Lambda Left join with an Inner join

查看:588
本文介绍了LINQ Lambda左联接与内联接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经编写了一个LINQ lambda查询,到目前为止,该查询返回所有没有相关培训行的工作人员,它们工作正常.现在,我需要修改where子句,以使用将manager表连接到staff表上的manager id.

I have written a LINQ lambda query which so far which returns all staff which do not have an associated training row which works fine. I now need to amend my where clause to use the manager id joining manager table onto staff.

我不太确定如何修改此左联接lambda以包括内部联接.如果有人能指出我正确的方向,那将不胜感激.

I am a little unsure how to modify this left join lambda to include an inner join. If anyone can point me in the right direction that would be very much appreciated.

    var managerId = 1;

    var query = db.staff

                .GroupJoin(db.training,
                    s => s.id,

                    t => t.staff_id,
                    (s, t) => new {Staff = s, Training = t.FirstOrDefault()})

    //TODO: join manager.id on staff.manager_id


            .Where(st => st.Training==null);//TODO: modify where clause && manager.id == managerId 

谢谢

推荐答案

内部联接是通过Join方法执行的.我认为您的查询应该是这样的:

Inner joins are performed with the Join method. I think your query should go something like this:

var query = db.staff
              .GroupJoin(db.training,
                         s => s.id,
                         t => t.staff_id,
                         (s, t) => new { Staff = s, Training = t.FirstOrDefault() })
              .Join(db.manager,
                    gj => gj.Staff.manager_id,
                    m => m.id,
                    (gj, m) => new { Staff = gj.Staff, Training = gj.Training, Manager = m })
              .Where(st => st.Training == null
                        && st.Manager.id == managerId);

这篇关于LINQ Lambda左联接与内联接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆