加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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是真正的输入输出)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读