加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读