c# – 运行Linq语句的超时异常
这才刚刚开始发生.这个声明已经工作了几个月,现在我只是继续得到下面的超时错误.当我直接在SSMS上执行相同的语句时,它会在一秒钟内返回.该表有44k记录,并且是5列状态的索引,其中一列是其中之一.
select distinct(state) from [ZipCodeDatabase] 我正在运行以下linq语句 states = ZipCodeRepository.Get(orderBy: z => z.OrderBy(o => o.State)).Select(z => z.State).Distinct().ToList(); 当我运行这个linq语句时,我不断收到超时错误并且不知道y因为它之前正常工作. 我包含了Get()函数,它是一个通用的repo函数,但也许我在那里遗漏了一些东西,这导致了延迟. 获取功能: public virtual IEnumerable<TEntity> Get( Expression<Func<TEntity,bool>> filter = null,Func<IQueryable<TEntity>,IOrderedQueryable<TEntity>> orderBy = null,string includeProperties = "") //params Expression<Func<TEntity,object>>[] includes { IQueryable<TEntity> query = dbSet; if (filter != null) { query = query.Where(filter); } foreach (var includeProperty in includeProperties.Split (new char[] { ',' },StringSplitOptions.RemoveEmptyEntries)) { query = query.Include(includeProperty); } if (orderBy != null) { return orderBy(query).ToList(); } else { return query.ToList(); } } 超时错误:
解决方法
您只是为了选择不同的状态而实现数据库中的每一行.让数据库为您完成繁重的工作,只需返回状态而不是实现所有内容,然后让.Net执行此操作.
将其添加到ZipCodeRepository中 public IEnumerable<string> GetStates() { return dbSet.OrderBy(e => e.State).Select(e => e.State).Distinct(); } 请注意,导致实现(以及大量开销)的原因是ToList(). 通常,将集合保留为IQueryable,直到您真正准备好使用结果.实际枚举集合EF的那一刻,无论如何都会实际执行查询. 或者,如果删除ToList()调用并将Get函数的返回类型更改为IQueryable< TEntity>这也应该解决这个问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |