C# 列表到数据表的转换需要更多的时间
使用实体框架将列表(即泛型列表)传递给存储过程的最佳方式是什么 我使用的当前解决方案将列表转换为C# 列表到数据表的转换需要更多的时间,c#,sql-server,entity-framework,linq,datatable,C#,Sql Server,Entity Framework,Linq,Datatable,使用实体框架将列表(即泛型列表)传递给存储过程的最佳方式是什么 我使用的当前解决方案将列表转换为DataTable,然后将其传递给存储过程 下面显示的代码用于将泛型列表转换为数据表,但处理大约100000条具有6个属性的对象记录需要大约10秒钟 public static DataTable ToDataTable<T>(List<T> iList) { DataTable dataTable = new DataTable();
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;
}
公共静态数据表到数据表(列表iList)
{
DataTable=新的DataTable();
属性描述集合属性描述集合=
GetProperties(typeof(T));
对于(int i=0;i
我需要一些最好的方法来用更少的时间将值列表传递给存储过程。我会像创建用户定义的表类型那样来完成。我想这样会更好更快
来源:
[https://stackoverflow.com/questions/7097079/c-sharp-sql-server-passing-a-list-to-a-stored-procedure][1]
您使用的是什么数据库?SQL Server 2012请参见:或者我只使用了类似的方法(传递数据表),您可以检查10秒的时间在哪里使用吗?iList或GetValue上的foreach循环?拥有通用的解决方案是很好的,但在这种情况下,一对一属性映射可能会更有帮助。我在过去曾遇到过类似的情况,并使用硬编码映射将映射时间从大约350ms减少到32ms,而最初的通用解决方案使用反射。