如何使用LINQ扩展方法创建多个连接?

时间:2012-09-14 17:52:53

标签: c# linq entity-framework

我在使用多个连接的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的情况下添加此关系。

感谢您的时间。

4 个答案:

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