0

我有一个完整的 LINQ 查询。如果用户是经理/团队负责人,我需要运行一次查询,如果不是,则需要运行单独的查询。但是查询非常相似。

经理/团队负责人可以看到一切。其他人只看到他们获得认证的地方。

var model = (from d in department
                join f in db.IPACS_Function on d.departmentID equals f.departmentID
                join pg in db.IPACS_Process on f.functionID equals pg.functionID
                join sop in db.IPACS_Procedure on pg.processID equals sop.processID
                // Non-Manager/Teamlead portion
                join cert in db.IPACS_Certification on sop.procedureID equals cert.procedureID
                join procdoc in db.IPACS_ProcedureDocs on sop.procedureID equals procdoc.procedureID
                join doc in db.IPACS_Document on procdoc.documentID equals doc.documentID
                where cert.adUserName == currUser && cert.certifiedDate > doc.dateApproved
                // End non-manager/team lead
                select new IPACS_DT_MasterList
                {
                    departmentID = d.departmentID,
                    functionID = f.functionID,
                    processID = pg.processID,
                    procedureID = sop.procedureID,
                    departmentName = d.name,
                    functionName = f.name,
                    processName = pg.name,
                    procedureName = sop.name,
                    owner = sop.owner,
                    automated = (bool)sop.automated
                });

var model =在不创建两个单独的语句的情况下,我在上面尝试做的事情是否可行?

4

1 回答 1

2

为什么不只是创建一个查询,然后如果不是团队负责人,则在将查询发送到数据源之前添加额外的 join/where 子句

IE:

var query = (from d in department
            join f in db.IPACS_Function on d.departmentID equals f.departmentID
            join pg in db.IPACS_Process on f.functionID equals pg.functionID
            join sop in db.IPACS_Procedure on pg.processID equals sop.processID

            select new {d, f, pg, sop});



if (!TeamLeader){
        query = from x in query
            // Non-Manager/Teamlead portion
            join cert in db.IPACS_Certification on x.sop.procedureID equals cert.procedureID
            join procdoc in db.IPACS_ProcedureDocs on x.sop.procedureID equals procdoc.procedureID
            join doc in db.IPACS_Document on procdoc.documentID equals doc.documentID
            where cert.adUserName == currUser && cert.certifiedDate > doc.dateApproved
            // End non-manager/team lead
            select x;
}

var model = (from x in query
            select new IPACS_DT_MasterList
            {
                departmentID = x.d.departmentID,
                functionID = x.f.functionID,
                processID = x.pg.processID,
                procedureID = x.sop.procedureID,
                departmentName = x.d.name,
                functionName = x.f.name,
                processName = x.pg.name,
                procedureName = x.sop.name,
                owner = x.sop.owner,
                automated = (bool)x.sop.automated
            });
于 2013-07-18T15:17:39.687 回答