我试图从使用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); }
原文地址:https://www.jb51.cc/csharp/96775.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。