2016-07-05 2 views
0
where task.RevisionDateTime > startDateTime_ 
          && task.RevisionDateTime <= endDateTime_ 
          && task.AutoAuditNotes.ToLower() != auditString.ToLower() 
          && (if(isStaging_) condition1 else condition2) 
          select task).ToList(); 

where 절 아래에 IF ELSE 문 && (if(isStaging_) condition1 else condition2)이 있습니다. WHERE 절에 조건을 추가하면 어떻게 isStaging_ 변수의 값을 방어 할 수 있습니까?LINQ WHERE 절의 IF ELSE 문

감사합니다.

+0

'_isStaging' *이 (가) 조건이므로 약간의 혼란이 있다고 생각합니다. –

+0

@ un-lucky 같은 조건은 없습니다 : &&'(if (isStaging_) task.IsCurrent == true else task.AutoAuditNotes.ToLower()! = auditString.ToLower()) ' – simpleProgrammer

+0

isStaging_ 그렇지 않으면 condition2가됩니다. – Kinetic

답변

4

당신은 같은 것을 할 수 있습니다

where task.RevisionDateTime > startDateTime_ 
         && task.RevisionDateTime <= endDateTime_ 
         && task.AutoAuditNotes.ToLower() != auditString.ToLower() 
         && ((isStaging_ && condition1) || condition2) 
         select task).ToList(); 
+0

고마워요. 작동하지만 코드를 이해하는 데 어려움을 겪고 있습니다. 죄송합니다. 설명해 주시겠습니까? 감사합니다. – simpleProgrammer

0

당신이 직접 대답하지

if(isStaging_) 
{ 
    //condition1 
    where task.RevisionDateTime > startDateTime_ 
         && task.RevisionDateTime <= endDateTime_ 
         && task.AutoAuditNotes.ToLower() != auditString.ToLower() 
         select task).ToList(); 
} 
else 
{ 
    //condition2 
    where task.RevisionDateTime > startDateTime_ 
         && task.RevisionDateTime <= endDateTime_ 
         && task.AutoAuditNotes.ToLower() != auditString.ToLower() 
         select task).ToList(); 
} 
+0

메모리 관리 및 LOC는 어떻게됩니까? –

3

시도 - 나는 운동의 답변을 upvoted. 그러나이 주석은 주석을 삽입 할 수없는 코드 형식을 필요로합니다.

조건을 분리하여 별도의 기능을 사용하면 훨씬 쉽게 읽을 수 있습니다. 예를 들어, 무엇이든간에 :

&& ((isStaging_ && condition1) || condition2) 

확인 대상을 설명하는 이름과 함께 고유 한 기능을 넣으십시오. 브랜칭 (branching)으로 인해 누군가가 읽고 따르기가 어려워지며 심지어 일주일 후에 그것을 쓴 사람조차도 어려워집니다. 그러나 함수 호출 인 경우 함수의 이름이 주석 역할을합니다.

긴 LINQ 쿼리는 기이하게 쓰기에 만족하지만 다른 사람이 자신이하는 일을 이해하는 것은 매우 어려울 수 있습니다.

+0

오, 전이 점에 대해 전적으로 동의합니다. – Kinetic