2011-08-19 51 views
5

我有這兩條線,那是完全一樣的東西。但是寫法不同。哪一種更好的做法,爲什麼?哪個更好的方法來使用LINQ?

firstRecordDate = (DateTime)(from g in context.Datas 
            select g.Time).Min(); 

firstRecordDate = (DateTime)context.Datas.Min(x => x.Time); 
+2

我懷疑這是個人偏好的情況。我個人發現第二個更清楚和更簡單,但我確信其他人認爲是相反的。我相信有人能夠確認他們是否編譯到相同的事情或不。 :) – Chris

回答

6

在方法語法和查詢 語法之間沒有語義差異。此外,某些查詢(例如檢索與指定條件匹配的元素數量的元素,或者檢索源序列中具有最大值的元素的查詢)只能以方法調用的形式表示。 可以表示爲方法調用。

http://msdn.microsoft.com/en-us/library/bb397947.aspx

也看這裏:.NET LINQ query syntax vs method chain

歸結到一點,你是舒服什麼,你發現了什麼是更具可讀性。

+0

+1有趣的小讀。 –

1

第二個使用lambda表達式。我喜歡它,因爲它更緊湊,更容易閱讀(儘管有些人會發現前者更易於閱讀)。

此外,如果您有SQL背景,第一種更適合。

1

我想說的是對您的開發團隊來說最具可讀性或可理解性。回來一年左右,看看你是否還記得那個LINQ ......好吧,這個特別的LINQ顯然很簡單,所以這是沒有意義的:-)

最好的做法也頗有見地,你不會得到一個答案在這裏。在這種情況下,我會選擇第二個項目,因爲它很簡潔,我可以比第一個更快地親自閱讀和理解它,但速度稍快。

1

我個人更喜歡使用lambda表達式。據我所知,沒有真正的區別,你說你可以用兩種方法做同樣的事情。我們同意所有人都使用lambda表達式,因爲它很容易閱讀,關注並接受不喜歡SQL的人。

1

假設您實際上在每種格式中都編寫了等效語句,那麼結果就完全沒有區別。

尋找任何給定的查詢最可讀的。使用連接和許多where子句的複雜查詢通常更容易在linq查詢語法中編寫/讀取,但使用方法鏈接語法更簡單,如context.Employees.SingleOrDefault(e => e.Id == empId)更容易。沒有一般的「一個更好」的規則,對於任何給定的例子,兩個人可能有不同的意見。

1

這兩個陳述之間沒有語義上的區別。你選擇的純粹是一種風格偏好問題

1

你是否需要在其中任何一個顯式演員?時間不是時間嗎?

我個人更喜歡第二種方法,因爲我發現擴展方法的語法比LINQ語法更熟悉,但它實際上只是個人偏好,他們執行相同的操作。

第二個寫成更精確的看起來像第一個將是context.Datas.Select(x => x.Time).Min()。所以你可以看到你如何用Min(x => x.Time)編寫它可能會稍微更有效率,因爲你只需要操作而不是兩個

1

查詢理解語法實際上被編譯爲一系列對擴展方法的調用,這意味着這兩種語法在語義上是相同的。無論你喜歡哪種風格,都應該使用。

相關問題