LINQ Lambda左连接与内连接

时间:2015-05-29 09:22:22

标签: c# linq lambda

我编写了一个LINQ lambda查询,到目前为止,该查询返回所有没有相关训练行的工作人员。我现在需要修改我的where子句以使用经理ID加入经理表到员工。

我有点不确定如何修改此左连接lambda以包含内连接。如果有人能指出我正确的方向,那将非常感激。

    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 

由于

3 个答案:

答案 0 :(得分:4)

使用Join方法执行内部联接。我认为您的查询应该是这样的:

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);

答案 1 :(得分:1)

您可以执行以下操作(我没有使用方法链语法使其更容易可读IMO ):

Release

答案 2 :(得分:1)

喜欢这样:

var query = from s in db.staff
    join m in db.manager on s.manager_id equals m.id
    from t in db.training
        .Where(w=>w.staff_id==s.id).DefaultIfEmpty()
    select new
    {
        Staff = s,
        Training = training
    };