2009-12-29 8 views
0

이 LINQ 쿼리가 있습니다.이 LINQ 쿼리의 where-condition을 최적화 할 수 있습니까?

   bool? a, b, c; 

      from i in _ctx.SomeEntitySet 

      where 
       (a == null ? true : i.IsA == a) && 
       (b == null ? true : i.IsB == b) && 
       (c == null ? true : i.IsC == c) 

      select i; 

x != null 인 경우에만 IsX == x 조건을 고려합니다.

Brainfreeze, 제발 도와주세요 ...

+0

일반적으로'x == a? 사실 : x == b는'x == a ||와 동일하다. x == b'. –

답변

4
where (a == null || i.IsA == a) && 
     (b == null || i.IsB == b) && 
     (c == null || i.IsC == c) 
+0

아 물론! 감사. – Mickel

3

하지 ... 나 좀 도와하지만 더 읽어주십시오 :

이 가장 명확하게 가지고있는 버전은 표현
 bool? a, b, c; 

     from i in _ctx.SomeEntitySet 

     where 
      (a == null || i.IsA == a) && 
      (b == null || i.IsB == b) && 
      (c == null || i.IsC == c) 

     select i; 
1

내가 생각 의향. 나는 그것을 바꾸지 않을 것이다.

대안 : 다음의

a == null || i.IsA == a; 

!a.HasValue || i.IsA == a; 

i.IsA == (a ?? i.IsA); 

없음 그러나 나에게 명확하지 않습니다. 효율성에 중점을 두지 말고 가독성과 표현력에 중점을 두십시오.

+0

개인적으로 나는 (a == null || i.A == a)가 (a == null? true : i.IsA == a)보다 읽기 쉽다고 생각한다. –

+0

아마도 더 짧기 때문에 더 읽기 쉽지만 나는 그렇지 않다. 그것이 코드의 의도를 가장 명확하게 표현한다고 생각하십시오. 물론, 이것은 다소 주관적입니다. – jason

관련 문제