c# - 使用 .Take() 方法对实体的 Linq 非常慢

标签 c# asp.net linq entity-framework

我有一个包含 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/

相关文章:

c# - 优化象限选择

c# - Asp.Net 连接表,以便它们可以正确排序 C# LINQ

c# - 如何比较 2 组数组的不同匹配项

c# - 如何以编程方式保存来自另一个网站的图像?

c# - 将 PDF 保存为 SQL 二进制文件 (.Net)

c# - 区分多个 webclient 结果

c# - 如何为 .net core MVC Web 应用程序创建和显示 PDF 文件?

asp.net - 最大化网站的并行下载

c# - 表中每一行的删除按钮 asp.Net C#

c# - 尽管 GetEnumerator 和 foreach 运行良好,但为什么我不能使用 OrderBy?