使用Entity Framework将列表(即通用列表)传递到存储过程的最佳方法是什么。
我正在使用的当前解决方案将列表转换为DataTable
,然后将其传递到存储过程。
下面显示的代码用于将通用列表转换为数据表,但处理大约100000条具有6个属性的对象记录大约需要10秒钟。
public static DataTable ToDataTable<T>(List<T> iList)
{
DataTable dataTable = new DataTable();
PropertyDescriptorCollection propertyDescriptorCollection =
TypeDescriptor.GetProperties(typeof(T));
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
{
PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[i];
Type type = propertyDescriptor.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
type = Nullable.GetUnderlyingType(type);
dataTable.Columns.Add(propertyDescriptor.Name, type);
}
object[] values = new object[propertyDescriptorCollection.Count];
foreach (T iListItem in iList)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = propertyDescriptorCollection[i].GetValue(iListItem);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
我需要一些最佳方法,以便用更少的时间将值列表传递给存储过程。
答案 0 :(得分:0)
我将通过创建用户定义的表类型来做到这一点。我认为这样会更好更快。
来源:[https://stackoverflow.com/questions/7097079/c-sharp-sql-server-passing-a-list-to-a-stored-procedure][1]