Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询select语句优先于order by,反之亦然_C#_.net_Performance_Entity Framework_Linq - Fatal编程技术网

C# LINQ查询select语句优先于order by,反之亦然

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

我想知道以下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是一个具有名称和年龄属性的数据库实体)

它实际上取决于实际的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。