我在使用多个连接的LINQ方法调用时遇到问题。我正在尝试做这样的事情:
if (!isDepSelect)
{
query = (from Items in db.DEPARTMENTs
select Items);
}
else
{
query = (from Items in db.DEPARTMENTs
from gDept in db.DEPT_PROFILE
from wAccess in db.WEB_ACCESS
where Items.DEPT_CODE == gDept.DEPT_CODE && gDept.USER_ID == wAccess.USER_ID && wAccess.EMP_ID == id
select Items);
}
我做到了这一点:
IQueryable<DEPARTMENT> query = db.DEPARTMENTs;
if (isDepSelect)
{
query = query.Join(db.DEPT_PROFILE,depts => depts.DEPT_CODE,prof => prof.DEPT_CODE,(depts, prof) => depts);
}
但现在我不知道如何使用WEB_ACCESS表和EMP_ID = id的条件添加DEPT_PROFILE表的JOIN。
我这样做的原因是isDepSelect布尔值不是此查询将改变其关系的唯一条件,我需要在不重复我的LINQ的情况下添加此关系。
感谢您的时间。
答案 0 :(得分:2)
试试,
List<DEPARTMENTs> list = db.DEPARTMENTs.Join(db.DEPT_PROFILE, dept => dept.DEPT_CODE, prof => prof.DEPT_CODE, (dept,prof) => new {dept, prof})
.Join(Wdb.WEB_ACCESS, depts => depts.prof.USER_ID,web => web.USER_ID,(depts,web) => new { depts, web})
.Where(result => result.web.EMP_ID== id).Select(s => s.depts.dept).ToList<DEPARTMENTs>();
答案 1 :(得分:0)
如果您设置了关联,则可以在代码中没有任何连接的情况下执行此操作:
query = db.DEPARTMENTs
.Any(item => item.DEPT_PROFILEs
.Any(gDept => gDept.WEB_ACCESSs
.Any(wAccess => wAccess.EMP_ID == id)));
当然,假设图中每个对象之间的关系为1米。如果图中有1-0..1个关系,你可以删除一些Any方法。
答案 2 :(得分:-1)
你应该使用equals运算符...
query = from Items in db.DEPARTMENTs
from gDept in db.DEPT_PROFILE
join wAccess in db.WEB_ACCESS on
gDept.DEPT_CODE equals Items.DEPT_CODE
select Items;
这只是您的示例查询的片段,但您可以看到我如何使用join运算符引入第二个表和equals运算符来声明连接列。
答案 3 :(得分:-1)
这应该有效:
query = (from Items in db.DEPARTMENTs
join gDept in db.DEPT_PROFILE
on Items.DEPT_CODE equals gDept.DEPT_CODE
join wAccess in db.WEB_ACCESS
on gDept.USER_ID equals wAccess.USER_ID
where wAccess.EMP_ID == id
select Items);