我有一个包含 200,000 条记录的表,其中我使用 .Take()
仅获得前 10 条记录,但获取数据大约需要 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();
spdata()
是一个从存储过程导入的函数。
谢谢
最佳答案
存储过程可能会向客户端返回大量数据,这非常慢。您不能将查询远程发送到存储过程。这可以使用 View 或表值函数。
无法在查询中使用存储过程。只能自己执行。
您的意图可能是在服务器上执行 Take(10)
。为此,您需要切换到内联查询、 View 或 TVF。
关于c# - 使用 .Take() 方法对实体的 Linq 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13934236/