2012-09-08 86 views
2

我有以下查詢:LINQ LAMBDA書面命令查詢

 var query = db.Prog 
     .Where (a => a.Prog != "00000" && a.fn != "Koll") 
     .Select(a => new {a.Prog, a.MEfn}) 
     .OrderByDescending(a => a.MEfn) 

查詢工作正常,但如果在你寫一個lambda LINQ查詢的順序一般規則疑惑。意思,.Where來之前,選擇等等。

有人能告訴我LINQ需要寫入的順序或最佳實踐。

回答

1

對於您編寫LINQ查詢的順序,沒有一個最佳實踐,它將取決於您是要先進行過濾還是您的投影。例如,對於您的情況,您將投射到一個匿名類型,該類型不包含您的過濾器使用的'fn'屬性,所以如果您的選擇是第一個,那麼它將無法在where子句中使用。

一個更好的做法是給你的屬性更神祕的名字。另外,'fn'不遵循PascalCase的屬性名稱,如果它是一個字段,那麼它可能不應該公開。

0

他們應該在的順序完全取決於你在做什麼的背景。因此,如果您的OrderBy只是簡單地將數據格式化爲友好的視圖,那麼在裁剪完您的集合後將其放在最後,如果您正在尋找已排序集合的第一個值,那麼在集合迭代到之前可能需要它獲得第一名。

0

你可以是一個很好的訂單。

讓我們來區分db指向具有非常好的LINQ提供程序的SQL DB的情況,而db是內存中的對象。我想這是第一個。

如果您使用的是LINQ to SQL提供程序,則只有在將查詢實現爲對象時纔會評估語句,因此SQL優化程序(在DB內部)將負責語句的排序。

當您的語句針對內存中的集合或來自LINQ to SQL的物化集合運行時,反之亦然。在這種情況下,它們會按順序執行,所以您想要首先執行那些減少集合中結果數量的語句。 Where是最好的候選人!