2017-01-21 8 views
1

次の3つのLinq式が等しいかどうか、または他の3つのLinq式が同等かそれより優れているかを知りたいのですが、なぜですか?LINQ-query select文を使用する前に、またはその逆の方が良い場合

var studentDetails1 = context.Student.OrderBy(a => a.Age).Select(s => new { s.Name, s.Age }).ToList(); 


var studentDetails2 = context.Student.Select(s => new { s.Name, s.Age }).OrderBy(a => a.Age).ToList(); 


var studentDetails3 = context.Student.OrderBy(a => a.Age).ToList().Select(s => new { s.Name, s.Age }); 

(ここでは通常のコンテキストがDBContextと学生は名前と年齢の特性を有するデータベース・エンティティであることを意味するとして)

+2

なぜベンチマークしないのですか? –

+0

エリック私はあなたを手に入れませんでした.. – Prageeth

+1

実際の質問があり、説明を下さっただけでは本当に迷惑になりました。 – Prageeth

答えて

1

それは本当に、実際のLINQプロバイダの実装にし、この特定の例Entity Frameworkの方言相補的に依存することができます。

しかし、一般的に、最初の2人はサーバー上で正確に同じソートを行い、1つの投影のみを取得する必要がありますが、最後のものはすべての生徒エンティティデータをフェッチして実際に生徒オブジェクトを作成します。

2

これは、Lukasz Rozmejitの回答として、エンティティフレームワークの方言の実装に依存します。通常、最初の2つは同じSQLに評価されます。最後のものは不要なデータをフェッチし、2つの列のみを使用します。 データベースのソートを行わないことをデータベースの専門家が推奨しました。 SQLのCPU時間は最も高価なCPU時間です。

var studentDetails1 = context.Student.Select(s => new {s.Name、s.Age})。ToList()。OrderBy(a => a.Age);

これはデータベースのCPUを使用するのではなく、サーバーでソートを行います。

関連する問題