EF另一个 SqlParameterCollection 中已包含 SqlParameter。

代码:

SqlParameter[] commandParameters = new SqlParameter[]{
                new SqlParameter("@CultID",filters.ParentID)
            };

            var result = db.Database.SqlQuery<FM_PlantSolutions>(@"select s.* ,u.UserName as PrincipalName,
                    isnull(ue.UserName,'无') as ExaminerName ,i.BaseName AS InputsTypeName
                    from [v_PlantSolutionsRelation] as r
                    inner join dbo.FM_Solutions as s on r.SoluID = s.SoluID
                    inner join dbo.U_UserInfo as u on s.Principal= u.UserID
                    left join dbo.U_UserInfo as ue on s.Examiner = ue.UserID 
                    inner join dbo.B_BaseInfo as i on s.InputsType=i.BaseValue
                    where r.CultID = CultID and  i.ClassID = 21 ", commandParameters);
            var q= result.OrderBy(t => t.SoluName).Skip((filters.page - 1) * filters.rows).Take(filters.rows);

            return new 
            {
                rows = q.ToList(),
                records = result.Count(),

                page = filters.page,
                pagesize = filters.rows
            };

  

查询报表的时候需要通过两次查询取出数据。

第一次,用count(*)查出总数;

第二次,用rownumber分页取出想要的页内容;

然而,无论怎么修改,总是报错:另一个 SqlParameterCollection 中已包含 SqlParameter。
参照了网友的做法:https://www.cnblogs.com/jhli/p/6898650.html

但是并没有解决问题,分析报错的原理,大概是这段代码执行了两次,传入了两次同样的参数,所以索性将.ToList()往前放,直接将所有数据加载到内存中,再进行分页,问题解决了,修改后的代码
SqlParameter[] commandParameters = new SqlParameter[]{
                new SqlParameter("@CultID",filters.ParentID)
            };

            var result = db.Database.SqlQuery<FM_PlantSolutions>(@"select s.* ,u.UserName as PrincipalName,
                    isnull(ue.UserName,'无') as ExaminerName ,i.BaseName AS InputsTypeName
                    from [v_PlantSolutionsRelation] as r
                    inner join dbo.FM_Solutions as s on r.SoluID = s.SoluID
                    inner join dbo.U_UserInfo as u on s.Principal= u.UserID
                    left join dbo.U_UserInfo as ue on s.Examiner = ue.UserID 
                    inner join dbo.B_BaseInfo as i on s.InputsType=i.BaseValue
                    where r.CultID = CultID and  i.ClassID = 21 ", commandParameters).ToList();
            var q= result.OrderBy(t => t.SoluName).Skip((filters.page - 1) * filters.rows).Take(filters.rows);

            return new 
            {
                rows = q,
                records = result.Count(),

                page = filters.page,
                pagesize = filters.rows
            };
        }

 

转载于:https://www.cnblogs.com/bamboo-zhang/p/9546745.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值