c# – 获取COUNT时Linq Select Statement变慢
发布时间:2020-12-15 17:44:04 所属栏目:百科 来源:网络整理
导读:我试图从使用EntityFramework和 Linq的下面的方法获得总记录数.返回计数很慢. public static int totalTracking(int id){ using (var ctx = new GPEntities()) { var tr = ctx.Tracking .Where(c = c.clientID == Config.ClientID) .Where(c = c.custID == i
我试图从使用EntityFramework和
Linq的下面的方法获得总记录数.返回计数很慢.
public static int totalTracking(int id) { using (var ctx = new GPEntities()) { var tr = ctx.Tracking .Where(c => c.clientID == Config.ClientID) .Where(c => c.custID == id) .Where(c => c.oOrderNum.HasValue) .ToList(); return tr.Count(); } } 解决方法
您可以显着简化查询:
using (var ctx = new GPEntities()) { return ctx.Tracking .Where(c => c.clientID == Config.ClientID) .Where(c => c.custID == id) .Where(c => c.oOrderNum.HasValue) .Count(); } 当您调用ToList时,这将触发实现,因此将向数据库发出查询,并将检索所有列.实际计数将在客户端上发生. 如果你只做Count,没有ToList,它会在你调用Count时发出查询,而server只返回一个数字而不是表. 这对于性能并不是那么重要,但我认为如果没有那么多,那么代码看起来会有点好看: using (var ctx = new GPEntities()) { return ctx.Tracking .Where(c => c.clientID == Config.ClientID && c.custID == id && c.oOrderNum.HasValue) .Count(); } 甚至 using (var ctx = new GPEntities()) { return ctx.Tracking .Count(c => c.clientID == Config.ClientID && c.custID == id && c.oOrderNum.HasValue); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 正则中表示一个反斜线要使用四个反斜线
- 使用indexedDB(一)(翻译)
- reactjs – React Router不呈现Component
- 不能运行JSONObject.fromObject
- c# – Entity Framework 6 – 强制执行异步查询,编译时阻止
- iphone – 我有注册的应用程序ID,但仍然显示您没有适用于iO
- jsf – faces-config.xml是配置文件
- ruby-on-rails – 没有路由匹配[GET]“/assets/bootstrap.c
- Cocos2dx 3.0 实战之—— 重写《超级马里奥》其二 加入自适
- Ruby 使用 xmlparser 解析 XML 信息