Linq to实体使用.Take()方法非常慢

Ali*_*ssa 5 c# linq asp.net entity-framework

我有一张200,000记录的表格,我只获得了前十名的记录,.Take()但是获取数据大约需要10秒钟.

我的问题是:该.Take()方法是否从数据库获取所有数据并过滤客户端的前10名?

这是我的代码:

mylist = (from mytable in db.spdata().OrderByDescending(f => f.Weight)
                                    group feed by mytable.id into g
                                    select g.FirstOrDefault()).Take(10).ToList();
Run Code Online (Sandbox Code Playgroud)

spdata() 是一个函数从存储过程导入.

谢谢

usr*_*usr 8

存储过程可能会向客户端返回大量数据,这非常慢.您无法远程查询sproc.这可以使用视图或表值函数.

在查询中无法使用sproc.您只能自己执行它.

你的意图可能是Take(10)在服务器上执行.为此,您需要切换到内联查询,视图或TVF.


Mar*_*ers 6

扩展方法Take不能获取所有从数据库中的结果.那不是多么Take有效.

但是,您的db.spdata()调用可能会获取所有行.