我编写了一个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
由于
答案 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
};