当前位置:Gxlcms > 数据库问题 > 【EF框架】另一个 SqlParameterCollection 中已包含 SqlParameter。

【EF框架】另一个 SqlParameterCollection 中已包含 SqlParameter。

时间:2021-07-01 10:21:17 帮助过:15人阅读

List<SqlParameter>(); //参数列表 paramsList.Add(new SqlParameter("@schSno", schSno));//校区 StringBuilder wh = new StringBuilder(); wh.Append(" and SchSno=@schSno"); // wh.Append(" and StuName1=@stuName"); var sqlStr = string.Format("select * from Student where 1=1 {0}", wh); var context = DAL.EFContextFactory.GetCurrentDbContext(); //数据查询 var ret=context.Database.SqlQuery<Student >(sqlStr, paramsList.ToArray()).AsQueryable(); //第一次获取总数 var total = ret.Count(); //第二次获取分页数据 var list = ret.OrderByDescending(x=>x.stuNo).Skip((pageIndex-1)*pageSize).Take(pageSize).Tolist();

然而第二次查询的时候会报错,提示 

另一个 SqlParameterCollection 中已包含 SqlParameter。

网上的解决方案是
var ret=context.Database.SqlQuery<Student >(sqlStr, paramsList.ToArray()).AsQueryable();

改成

var ret = context.Database.SqlQuery<EnrLog_M>(sqlStr, paramsList.Select(x=> ((ICloneable)x).Clone()).ToArray()).AsQueryable();

然而并没有用

除非是

var ret = context.Database.SqlQuery<EnrLog_M>(sqlStr, paramsList.Select(x=> ((ICloneable)x).Clone()).ToArray()).Tolist();

但这时候所以的数据都已经在内存里了,

不会再查数据库了,所以使用Clone也是多余的。

目前没有比较好的解决办法,使用DbHelper,它内部也是实现了ToList()

 var ret2 = DbHelper.ExcuteQuery<EnrLog_M>(sqlStr, CommandType.Text, paramsList.ToArray());

 

【EF框架】另一个 SqlParameterCollection 中已包含 SqlParameter。

标签:uname   cut   esc   span   传递   内容   ble   one   orderby   

人气教程排行