我正在使用 IQueryable<T>
在我的整个应用程序中进行接口(interface),并将数据库上的 SQL 执行推迟到像 .ToList()
这样的方法
我有时需要找到某些列表的计数 - 而无需使用正在计数的列表中的数据。根据我的 SQL 经验,我知道 SQL COUNT() 对数据库的工作量远低于返回所有行的等效 SELECT 语句。
所以我的问题是:从 IQueryable<T>
返回计数会减少数据库的工作量吗?的Count()
比渲染 IQueryable<T>
的方法到列表并调用列表的 Count()
方法?
我怀疑它会给出 ToList()
将触发 SELECT sql,然后在单独的查询中计算行数。我希望 Count()
在 IQueryable<T>
只是为 sql COUNT() 查询呈现 sql。但我不确定。你知道吗?
最佳答案
调用ToList()
将返回正版List<T>
包含所有数据,这意味着获取所有数据。不好。
调用Count()
确实应该呈现 SQL 以在数据库端进行计数。好多了。
然而,检查这一点的最简单方法是在您的数据上下文中启用日志记录(或您的特定提供者的任何等效项)并查看实际发送的查询。
关于sql - LINQ 中的 count VS select - 哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552909/