我有這兩條線,那是完全一樣的東西。但是寫法不同。哪一種更好的做法,爲什麼?哪個更好的方法來使用LINQ?
firstRecordDate = (DateTime)(from g in context.Datas
select g.Time).Min();
firstRecordDate = (DateTime)context.Datas.Min(x => x.Time);
我有這兩條線,那是完全一樣的東西。但是寫法不同。哪一種更好的做法,爲什麼?哪個更好的方法來使用LINQ?
firstRecordDate = (DateTime)(from g in context.Datas
select g.Time).Min();
firstRecordDate = (DateTime)context.Datas.Min(x => x.Time);
在方法語法和查詢 語法之間沒有語義差異。此外,某些查詢(例如檢索與指定條件匹配的元素數量的元素,或者檢索源序列中具有最大值的元素的查詢)只能以方法調用的形式表示。 可以表示爲方法調用。
http://msdn.microsoft.com/en-us/library/bb397947.aspx
也看這裏:.NET LINQ query syntax vs method chain
歸結到一點,你是舒服什麼,你發現了什麼是更具可讀性。
+1有趣的小讀。 –
第二個使用lambda表達式。我喜歡它,因爲它更緊湊,更容易閱讀(儘管有些人會發現前者更易於閱讀)。
此外,如果您有SQL背景,第一種更適合。
我想說的是對您的開發團隊來說最具可讀性或可理解性。回來一年左右,看看你是否還記得那個LINQ ......好吧,這個特別的LINQ顯然很簡單,所以這是沒有意義的:-)
最好的做法也頗有見地,你不會得到一個答案在這裏。在這種情況下,我會選擇第二個項目,因爲它很簡潔,我可以比第一個更快地親自閱讀和理解它,但速度稍快。
我個人更喜歡使用lambda表達式。據我所知,沒有真正的區別,你說你可以用兩種方法做同樣的事情。我們同意所有人都使用lambda表達式,因爲它很容易閱讀,關注並接受不喜歡SQL的人。
假設您實際上在每種格式中都編寫了等效語句,那麼結果就完全沒有區別。
尋找任何給定的查詢最可讀的。使用連接和許多where子句的複雜查詢通常更容易在linq查詢語法中編寫/讀取,但使用方法鏈接語法更簡單,如context.Employees.SingleOrDefault(e => e.Id == empId)
更容易。沒有一般的「一個更好」的規則,對於任何給定的例子,兩個人可能有不同的意見。
這兩個陳述之間沒有語義上的區別。你選擇的純粹是一種風格偏好問題
你是否需要在其中任何一個顯式演員?時間不是時間嗎?
我個人更喜歡第二種方法,因爲我發現擴展方法的語法比LINQ語法更熟悉,但它實際上只是個人偏好,他們執行相同的操作。
第二個寫成更精確的看起來像第一個將是context.Datas.Select(x => x.Time).Min()
。所以你可以看到你如何用Min(x => x.Time)
編寫它可能會稍微更有效率,因爲你只需要操作而不是兩個
查詢理解語法實際上被編譯爲一系列對擴展方法的調用,這意味着這兩種語法在語義上是相同的。無論你喜歡哪種風格,都應該使用。
我懷疑這是個人偏好的情況。我個人發現第二個更清楚和更簡單,但我確信其他人認爲是相反的。我相信有人能夠確認他們是否編譯到相同的事情或不。 :) – Chris