linq-to-sql – 查询结果不能多​​次枚举?

前端之家收集整理的这篇文章主要介绍了linq-to-sql – 查询结果不能多​​次枚举?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用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);

(我似乎记得OUTPUT变成ref,因为Tsql OUTPUT是真正的输入输出)

猜你在找的MsSQL相关文章