假设我有一张包含大量列的学生表。我想要EF的等效操作:
SELECT id,lastname,firstname
FROM students
WHERE coursename='Eurasian Nomads'
ORDER BY lastname,firstname
我只想使用Student
模型的一个子集,因此我创建了一个视图模型。
public class StudentView{
public int ID{get;set;}
public string LastName{get;set;}
public string FirstName{get;set;}
}
这段 EF 代码似乎可以工作:
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
时。 - LouisIQueryable
类型从一种形式变成另一种形式。OrderBy
和Where
不应该影响结果。 - Max