Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表到数据表的转换需要更多的时间_C#_Sql Server_Entity Framework_Linq_Datatable - Fatal编程技术网

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,而最初的通用解决方案使用反射。