2013-07-17 6 views
0

전체 LINQ 쿼리를 작성했습니다. 사용자가 관리자/팀 리드이고 개별 쿼리가 실행되지 않으면 실행되는 쿼리가 하나 필요합니다. 그러나 쿼리는 매우 유사합니다.if 문을 사용하는 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 = 문을 작성하지 않고 가능한 이상 할 노력하고 무엇입니까?

단지 쿼리를 만든 다음 아닌 경우 teamleader 쿼리 전에 절을 데이터 소스로 전송되는 경우 추가가/가입 추가하지 왜
+0

? LINQ to Objects에서 if 문은 확실히 문제가되지 않습니다. 나는 LINQ to SQL이 적절한 case 문을 생성 할 것이라고 생각하지만 그렇다고 확신하지는 않습니다. – evanmcdonnal

+0

왜 내가 볼 수 있듯이 의도적으로 읽기 쉽고 유지 보수하기 어려운 코드를 작성하겠습니까? –

+0

@AdrianWragg 일반적으로 그의 데이터 소스에는 6 개의 조인이 필요하므로 다른 형식으로는 더 읽기 쉽지 않다는데 동의합니다. 선호하는 솔루션이 될 SQL 스키마를 변경할 수는 있지만 거의 옵션이 아닙니다. – evanmcdonnal

답변

2

예 :

는 LINQ 공급자 무엇입니까
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 
      }); 
+0

테스트를 거쳐 작동했습니다! 고맙습니다. :) –

+0

당신은 환영합니다 :) –

관련 문제