私は、数十万の列を持つ生徒のテーブルがあるとします。私はOrderBy、Select、およびWhere句の順序が問題になるかどうかを確認する
SELECT id,lastname,firstname
FROM students
WHERE coursename='Eurasian Nomads'
ORDER BY lastname,firstname
のEFと同等にしたい私は
public class StudentView{
public int ID{get;set;}
public string LastName{get;set;}
public string FirstName{get;set;}
}
ビューモデルを作り、このEFコードが動作しているようですので、私はちょうどフルStudent
モデルのサブセットをしたい:
List<StudentView> students=context.Students
.Where(s=>s.CourseName=="Eurasian Nomads")
.OrderBy(s=>s.LastName)
.ThenBy(s=>s.FirstName)
.Select(s=>new StudentView(){ID=s.ID,LastName=s.LastName,FirstName=s.FirstName})
.ToList();
しかし、私の質問はこれらの句の順序がまったく問題なのかどうかです。もしそうなら、最高のパフォーマンスのためにどのような規則を守るべきですか?例えば
、これも動作するようです:それは、サーバーに対して実行される前、あなたのクエリを作成する
List<StudentView> students=context.Students
.Select(s=>new StudentView(){ID=s.ID,LastName=s.LastName,FirstName=s.FirstName})
.OrderBy(s=>s.LastName)
.ThenBy(s=>s.FirstName)
.Where(s=>s.CourseName=="Eurasian Nomads")
.ToList();
誰かに本物の答えを投稿させてもらいますが、すべてのメソッドが 'IQueryable'オブジェクトを返すので順序は重要ではなく、クエリの実行は実際には可能な最後の時点まで延期されますあなたが 'ToList'のとき – Louis
SQLサーバーを使用している場合は、SQLプロファイラを使用して、各バリエーションがどのSQLクエリを生成し、どのSQLクエリに時間がかかるかを確認できます。私が推測しなければならないのは、彼らは同じだと言うでしょう。 –
'Select'は' IQueryable'型をあるフォームから別のフォームに変更するので重要です。 'OrderBy'と' Where'は重要ではありません。 – Max