Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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# 在子属性上使用OrderByDescending时,LINQ查询速度较慢_C#_Sql Server_Linq - Fatal编程技术网

C# 在子属性上使用OrderByDescending时,LINQ查询速度较慢

C# 在子属性上使用OrderByDescending时,LINQ查询速度较慢,c#,sql-server,linq,C#,Sql Server,Linq,我将以上内容作为IQueryable返回,但当我运行allUsers.Count()时大约需要5秒钟,应该是即时的。有~2000个用户记录 LINQ是否在做一些低效的事情,比如为每个用户运行单独的查询来计算第一个UserStatusHistory记录 var allUsers = GetAllUsers() .Where(x => x.UserStatusHistory .OrderByDescending(y => y.Created) .First().Status

我将以上内容作为IQueryable返回,但当我运行
allUsers.Count()时大约需要5秒钟,应该是即时的。有~2000个用户记录

LINQ是否在做一些低效的事情,比如为每个用户运行单独的查询来计算第一个UserStatusHistory记录

var allUsers = GetAllUsers()
 .Where(x => x.UserStatusHistory
   .OrderByDescending(y => y.Created)
   .First().StatusId == (int) UserStatusEnum.Enabled);
编辑以回答问题:
GetAllUsers()返回一个IQueryable
正在使用EF Core 1.1.1。

GetAllUsers返回什么?所有用户的
列表
?要了解问题,您应该查看EF生成的sql。将数据库日志重定向到输出窗口,您可以看到sql server执行的所有查询。不确定sql如何转换,但您正在对UserStatusHistory排序。这可能会为每个用户记录创建一个嵌套的select查询,这将解释性能问题。在这一点上,我只是在猜测,但这是我首先要看的地方。我建议你试着用一个joinWell得出同样的结果,第一个可能是一个问题,试着用single代替,这个问题确实缺乏上下文。查询提供程序以不同的方式处理LINQ查询。您需要指定使用的ORM,例如EF6、EF核心(+版本)等。
edit to answer questions:

GetAllUsers() returns an IQueryable<User>
EF Core 1.1.1 is being used.