我使用实体框架,我的页面中有带有分页的网格,并且我为数据源创建了一个sql视图。
我得到的总记录如下,
totalRecords = _data.Database.SqlQuery<int>("select count(*) from MyView " + whereClause, parameters.ToArray()).Single();
我立即调用相同的视图来提取数据以及页面大小和页面索引。
totalRecords = _data.Database.SqlQuery<int>("select count(*) from FMRQueue " + whereClause, parameters.ToArray()).Single();
var fmrs = _data.Database.SqlQuery<QueueItemModel>(selectQuery, parameters.ToArray()).Skip(displayStartIndex).Take(recordsPerPage).ToList();
它抛出"The SqlParameter is already contained by another SqlParameterCollection."
异常。
请帮帮我。
SqlParameter 只能由单个集合所有者。需要手动克隆参数以将其添加到第二个集合(第二个查询)。
这是一个扩展方法"克隆",它使用内部方法"复制"来克隆参数。
var clonedParameters = parameters.Select(x => x.Clone()).ToArray();
public static class Extension
{
public static SqlParameter Clone(this SqlParameter @this)
{
var destination = new SqlParameter();
var copyToMethod = typeof (SqlParameter).GetMethod("CopyTo", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] {typeof (DbParameter)}, null);
copyToMethod.Invoke(@this, new[] {destination});
return destination;
}
}