2010-01-20 124 views
0

我正在使用LINQ編寫查詢 - 一個查詢顯示所有活動客戶,另一個顯示所有活動客戶以及非活動客戶。如何改進此查詢?

if(showall) 
{ 
    var prod = Dataclass.Customers.Where(multiple factors) (all inactive + active) 
} 
else 
{ 
    var prod = Dataclass.Customers.Where(multiple factors & active=true) (only active) 
} 

我可以使用只有一個查詢嗎?問題是,在這兩個查詢重複

感謝

回答

3
var customers = Dataclass.Customers.Where(multiple factors); 
var activeCust = customers.Where(x => x.active); 

我真的不明白的問題提出。我不想讓這一個班輪,因爲這將使由「狀態」欄中的代碼不可讀

+0

'替換你的表達式,謝謝,這有效 – 2010-01-20 17:36:16

0

難道你只是用你的第一個查詢返回的所有客戶多重因素?如果沒有,你會返回活動用戶兩次。

+0

其實我也有if \ else條件,只有一個查詢被觸發。 – 2010-01-20 17:12:00

+0

「只有一個查詢被解僱」 - 那麼爲什麼你問這個問題 – 2010-01-20 17:15:49

+0

我認爲你可能需要更新你的問題,這樣你就可以包含這樣的if/else條件。 – Fermin 2010-01-20 17:23:09

1

我假設你正在努力減少往返次數?

如果「多重因素」是一樣的,你可以篩選活躍用戶的第一次查詢後:

var onlyActive = prod.Where(p => p.active == true); 
+0

我會用'prod.Where(p => p.active)' – 2010-01-20 17:19:17

0

選項我會考慮

  • 將所有客戶一次,爲了讓您可以輕鬆拆他們分成兩組
  • 專注於最小化DB往返。無論您在前端執行什麼操作,其成本都要比去DB低一個數量級。
  • 修改用戶需求。例如。考慮對結果進行分頁 - 最終用戶不太可能同時需要所有客戶。
+0

我想增加OP關於DB成本的觀點。在很多情況下(如果不是大多數情況下),往返數據庫所帶來的額外開銷並不是數據庫花費很長時間,而是花費時間來完成請求並將結果傳輸回客戶端。這就像使web服務調用成本不僅僅是調用本地方法一樣。 – 2010-01-20 17:38:10

+0

是的。經驗法則,對於每個物理層,乘以10,如果不是100,則在某些情況下。 – Ariel 2010-01-20 17:50:39