2009-12-29 147 views
0

我有這樣的LINQ查詢:可以優化此LINQ查詢中的where條件嗎?

  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; 

我只想把條件IsX == x考慮如果x != null

BRAINFREEZE,請幫我...

+0

一般來說,'x == a? true:x == b'與'x == a ||相同x == b'。 – 2009-12-29 19:32:57

回答

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

啊,當然!謝謝。 – Mickel 2009-12-29 19:32:08

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.IsA == a)比(a == null?true:i.IsA == a)更具可讀性 – 2009-12-29 19:41:48

+0

也許它更具可讀性,因爲它更短,但我不認爲它最清楚地表達了代碼的意圖。當然,這是相當主觀的。 – jason 2009-12-29 19:46:49