2015-03-03 22 views
-4

我不知道哪一種方法更快,排序和LINQ從MS SQL數據庫中選擇元素布爾值進行排序:最快的方式通過LINQ

.OrderBy(c => c.StartDate) 
.ThenBy(c => !c.HasErrors) 
.FirstOrDefault(); 

.OrderBy(c => c.StartDate) 
.ThenByDescending(c => c.HasErrors) 
.FirstOrDefault(); 

也許每一個元素的nagation從表(HasErrors)對查詢執行時間有影響嗎?任何人都有關於此問題的信息?

+10

自己衡量一下。這比等待這裏的迴應花費更少的時間。 – 2015-03-03 12:52:10

+7

比較你自己的差異。我的猜測是:沒關係。 – CodeCaster 2015-03-03 12:52:11

+0

那麼'c.HasErrors'只是'c.HasErrors == true',可能'c.HasErrors == false'需要相同的時間... – libik 2015-03-03 12:53:10

回答

-1

起初:我沒有任何數據證實這一點,但兩種方法的區別幾乎肯定不相關。數據庫引擎很有可能在幕後做類似的事情。因此,只需使用第二個版本,因爲它更具可讀性(在第一種方法中可能會忽略!)。

儘管你的問題是:如果你只需要滿足條件的第一個,爲什麼還要關心用布爾值排序呢?

什麼:

.OrderBy(c => c.StartDate).FirstOrDefault(c => c.HasErrors); 

我知道,有一個小的區別,因爲你會得到空,如果有沒有錯誤沒有元素。然後,您的解決方案將爲第一個元素提供錯誤。但我想這是你真正想要的(如果我錯了,就責備我)。

1

第二種方法在理論上更快,因爲在將它與TRUE進行比較之前,您並不是首先翻轉c.HasErrors上的位。

的邏輯步驟如下

FIRST:

1. Order By start date 
2. Set c.HasErrors = !c.HasErrors 
3. Then Order By c.HasErrors 
4. Then return the first record, or null 

第二:

1. Order By start date 
2. Then Order Descending By c.HasErrors 
3. Then return the first record, or null 

在第一種情況下,你有你的查詢來執行額外的步驟。並且它必須爲每條記錄執行它,所以項目列表越長,它所需的時間就越多。