我正在使用LINQ to sql来获取sql server 2008中FullTextSearch存储过程的搜索结果.我将过程从服务器资源管理器拖到设计器中,并使用适当的返回类型和参数创建了该方法.现在的问题是,我需要得到调用此方法的结果的Count,所以使用我的存储库方法(这将调用Sproc方法并将结果作为IQueryable返回)我进行以下调用.
var result = repository.FullTextSearch(searchText); int resultsCount = result.Count(); var ret = result.Skip((pageNumber - 1) * PageSize).Take(PageSize).ToList();
该代码每次尝试运行时都会生成一个InvalidOperationException异常说(是的,你猜到了!)“查询结果不能一次枚举.
为Sproc生成的方法返回ISingleResult,它应该是O.K.据我所知.我需要在我的视图上支持分页,所以我需要知道总页数,(AFAIK再次)只有在可以得到所有项目的计数的情况下才可能.
我在这里缺少什么?
解决方法
既然这是执行一个存储过程,所有你可爱的Skip / Take都是很多的冗余,除了把所有的数据(存储过程调用都不可组合)别无选择.它唯一可以做的不是实现一些对象.
int result = repository.FullTextSearchCount(searchText); var result = repository.FullTextSearch(searchText,skip,take); // or similar
即将寻呼参数作为SPROC的一部分(以及使用ROW_NUMBER()/ OVER(…)或表变量,临时表等)在数据库中进行过滤),或者与OUTPUT参数类似的内容在sproc:
int? count = null; var result = repository.FullTextSearch(searchText,take,ref count);