2012-05-30 58 views
-1

我一直在LINQ玩弄到SQL,我只是有幾個簡單的問題:LINQ to SQL - 何時需要選擇以及何時可以省略選擇?

  • 什麼時候需要選擇我查詢的結束?
  • 何時可以省略選擇?

這裏是我的查詢示例:

Dim pageRoute = From r In db.PageRoutes Where r.PageId = pageId Order By r.Id Descending 

Dim pageRoute = From r In db.PageRoutes Where r.PageId = pageId Order By r.Id Descending 

Dim dp = From r In db.DownloadPageOnlineOnlies Where r.PageId = pageId Order By r.Weight Descending, r.Id Ascending 

Dim download = (From r In db.Downloads Where r.Id = id).First 
  • 是其中的任何技術上的錯誤?
  • 他們可以通過Select或其他方法改進嗎?

概括地說,我不明白的時候,我需要兩種:

Select r 
Select r.AColumnINeed, r.BColumnINeed (does this improve performance?) 

感謝。

P.S.我喜歡在一行寫我的LINQ查詢,除非它們真的很大。

+1

在VB.NET中不是'Select'總是可選的嗎? http://stackoverflow.com/a/6515130/284240 –

+0

我不知道這就是爲什麼我問。如果有些東西是可選的,那麼我通常會放棄它,只是爲了讓我的手指休息一下! –

+0

在http://stackoverflow.com/questions/6515037/differences-in-linq-syntax-between-vb-net-and-c-sharp/6515130#6515130什麼意思是「選擇什麼是當前」? –

回答

1

讓我們有一個20列的表。使用select(2列)和WITHOUT查詢。兩者的執行計劃可能不同,在前一種情況下從數據庫服務器傳輸的數據要少得多。

+0

好吧,我明白,但是,如果我想要所有列,例如,我需要'選擇r'。 T-SQL中的SELECT *'? –

+2

我不確定vb語法,但這應該是可選的,並且會被linq表達式訪問者作爲身份映射消除。 –

+0

所以如果我把Select放在最後並且不需要,它會被移除嗎?在編譯或執行期間? –

-1

如果您有一個查詢請求更精確的結果,並且您只希望查詢您可能使用select的一個或一個和b,並且它爲您的查詢節省了內存分配,它知道你將要返回的確切數量的變量。

+0

但是,爲什麼最好的做法?我通常在最佳實踐中支持一致性和較少的代碼! –

+1

使用較少的代碼並不總是意味着它提供了最好的性能 –

+0

我只是想減少代碼中的脂肪,使其更易於閱讀,調試和維護。 –

2

linq語句的select部分是完全可選的當且僅當您想從與您的where子句匹配的集合中獲取完整對象。如果你想要集合中的一個對象的單個值被LINQ'd通過,那麼你需要使用一個select子句。

我個人總是把select r條款放在純粹的習慣之外,但是當我有嚴格的選項時他們遇到了一些與其他人的代碼有關的問題,而他們在編寫LINQ時沒有遇到。如果您決定在將來因任何原因而調用option strict on,則關閉select子句會產生多個後期綁定錯誤。

簡而言之,您不需要select條款,但如果您決定打開option strict on,則只能在以後幫助自己。在我看來,它確實使您的代碼更具可讀性。

+0

感謝您的提示。我會考慮這個爲我的下一個項目:) –