1

我在使用具有多个连接的 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);    
            }

但是现在我不知道如何将DEPT_PROFILE表的JOIN与WEB_ACCESS表以及EMP_ID = id的条件相加。

我这样做的原因是 isDepSelect 布尔值不是此查询将更改其关系的唯一条件,我需要以某种方式添加此关系,而无需为每个条件重复我的 LINQ。

感谢您的时间。

4

4 回答 4

3

尝试,

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>();
于 2012-09-14T19:00:38.717 回答
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 方法。

于 2012-09-14T19:42:23.250 回答
-1

你应该使用等号运算符...

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;

这只是您的示例查询的一个片段,但您可以看到我是如何使用连接运算符来引入第二个表和使用等于运算符来声明连接列的。

于 2012-09-14T18:16:00.050 回答
-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);
于 2012-09-18T14:59:54.080 回答