C# LINQ查询select语句优先于order by,反之亦然
我想知道以下3个Linq表达式中的哪一个相等,或者其中一个是否比其他表达式更好,以及为什么C# LINQ查询select语句优先于order by,反之亦然,c#,.net,performance,entity-framework,linq,C#,.net,Performance,Entity Framework,Linq,我想知道以下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
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是一个具有名称和年龄属性的数据库实体)它实际上取决于实际的linq提供程序实现,在这个特定的示例中是实体框架方言的补充
但一般来说,在大多数正常情况下,前两个应该在服务器上执行完全相同的排序,只检索一个投影,而最后一个将获取所有学生实体数据并实际创建学生对象,这是最糟糕的一个。正如Lukasz Rozmejit所回答的,它确实取决于实体框架方言的实现。通常前两个将计算为相同的SQL。最后一个将获取不必要的数据并仅使用两列。 数据库专家建议我不要在数据库中排序。SQL cpu时间是最昂贵的cpu时间 var studentDetails1=context.Student.Select(s=>new{s.Name,s.Age}).ToList().OrderBy(a=>a.Age)
这将在服务器中进行排序,而不是在数据库中使用CPU。为什么不对它们进行基准测试?Eric,我没有理解你的意思。当我有实际问题并且没有给出解释时,这真的很烦人。我喜欢你的问题。。。不知道为什么会有人投反对票。无论如何,我建议您将不同风格的查询放在LINQPad中,然后查看结果SQL。