linq-to-sql – 查询结果不能多??次枚举?
发布时间:2020-12-12 16:16:55 所属栏目:MsSql教程 来源:网络整理
导读:我正在使用LINQ to SQL来获取Sql server 2008中FullTextSearch存储过程的搜索结果.我将过程从服务器资源管理器拖到设计器中,并使用适当的返回类型和参数创建了该方法.现在的问题是,我需要得到调用此方法的结果的Count,所以使用我的存储库方法(这将调用Sproc方
我正在使用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是真正的输入输出) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |