我想知道以下3个Linq表达式中的哪一个是相同的,或者一个是否与其他表达式相比更好,为什么?
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和Student是具有Name和Age属性的数据库实体)
答案 0 :(得分:2)
正如Lukasz Rozmejit所回答的,它确实依赖于实体框架方言实施。通常,前两个将评估相同的SQL。最后一个将获取不必要的数据并仅使用两列。 数据库专家建议我不要在数据库中排序。 SQL cpu时间是最昂贵的CPU时间。
var studentDetails1 = context.Student.Select(s => new {s.Name,s.Age})。ToList()。OrderBy(a => a.Age);
这将在服务器中进行排序,而不是在数据库中使用CPU。
答案 1 :(得分:1)
它实际上可以依赖于实际的linq提供程序实现,并且在这个特定的示例中实体框架方言补充。
但总的来说,在大多数理智场景中,前两个应该在服务器上执行完全相同的排序并仅检索投影,而最后一个将获取所有Student实体数据并实际创建Student对象,使其成为最差的。