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(); } }
超时错误:
System.Data.sqlClient.sqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. —> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out
at System.Data.sqlClient.sqlConnection.OnError(sqlException exception,Boolean breakConnection,Action1 wrapCloseInAction)
1 wrapCloseInAction)
at System.Data.sqlClient.sqlInternalConnection.OnError(sqlException exception,Action
at System.Data.sqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncclose)
at System.Data.sqlClient.TdsParser.TryRun(RunBehavior runBehavior,sqlCommand cmdHandler,sqlDataReader dataStream,BulkcopySimpleResultSet bulkcopyHandler,TdsParserStateObject stateObj,Boolean& dataReady)
at System.Data.sqlClient.sqlDataReader.TryCloseInternal(Boolean closeReader)
at System.Data.sqlClient.sqlDataReader.Close()
at System.Data.Common.DbDataReader.dispose(Boolean disposing)
at System.Data.Common.DbDataReader.dispose()
at System.Data.Common.Internal.Materialization.Shaper1.Finally()
1.SimpleEnumerator.dispose()
at System.Data.Common.Internal.Materialization.Shaper
at System.Collections.Generic.List1..ctor(IEnumerable
1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source)
1.Get(Expression
at ClientsToProfitsKendoUI.DAL.GenericRepository1 filter,Func
2 orderBy,String includeProperties)
解决方法
将其添加到ZipCodeRepository中
public IEnumerable<string> GetStates() { return dbSet.OrderBy(e => e.State).Select(e => e.State).distinct(); }
请注意,导致实现(以及大量开销)的原因是ToList().
通常,将集合保留为IQueryable,直到您真正准备好使用结果.实际枚举集合EF的那一刻,无论如何都会实际执行查询.
或者,如果删除ToList()调用并将Get函数的返回类型更改为IQueryable< TEntity>这也应该解决这个问题.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。