2011-08-19 10 views
5

私はこれらの2つのラインを持っていますが、まったく同じことです。しかし、別々に書かれています。より良い習慣は何ですか?なぜですか?LINQを使用するより良い方法はどれですか?

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

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

これは個人的な好みの場合と思われます。私は個人的に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は明らかにシンプルなので簡単です:-)

ベストプラクティスは、ここで一つの答え。この場合、2番目の項目は簡潔で個人的には最初の項目よりも速く読むことができますが、わずかに速いので、2番目の項目に移動します。

1

私は個人的にラムダ式の使用を好む。私が知る限り、あなたは全く同じことを両方の方法で行うことができると言っても、実際の違いはありません。私たちはラムダをすべて使いこなすことに同意しました。なぜなら、SQLを気に入らない人のために読んだり、フォローしたり、拾いやすいのです。

1

実際に各形式で同等の文を書くと仮定すると、結果には全く違いはありません。

任意のクエリに対して最も読みやすいものを選択してください。ジョインや多くのwhere節などの複雑なクエリは、linqクエリ構文で書き込み/読み込みが容易であることが多いが、context.Employees.SingleOrDefault(e => e.Id == empId)のような単純なものは、メソッド連鎖構文を使用する方が簡単です。一般的な「1つは良い」ルールはなく、与えられた例については2人の意見が異なる場合があります。

1

2つのステートメントの間に意味の違いはありません。あなたが選んだのは、純粋にスタイル設定の問題です。

1

いずれかに明示的なキャストが必要ですか?時間はすでに日付時刻ですか?

個人的に私はLINQ構文よりも拡張メソッドの構文が慣れ親しんでいるのを見て2番目の方法を好みますが、それは実際には個人的な好みであり、同じことを実行します。

より正確に最初のように書かれた2番目の文字は、context.Datas.Select(x => x.Time).Min()です。だから、Min(x => x.Time)で書いたのが少しだけ効率的かもしれません.2つではなく操作しているからです。

1

実際には、クエリの理解の構文は、拡張メソッドの一連の呼び出しにコンパイルされます。 2つの構文は意味的に同一です。あなたが好むスタイルはどちらを使うべきですか。

関連する問題