从列表到数据表的转换需要更多时间

时间:2018-08-29 03:19:14

标签: c# sql-server entity-framework linq datatable

使用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;
    }

我需要一些最佳方法,以便用更少的时间将值列表传递给存储过程。

1 个答案:

答案 0 :(得分:0)

我将通过创建用户定义的表类型来做到这一点。我认为这样会更好更快。

来源:[https://stackoverflow.com/questions/7097079/c-sharp-sql-server-passing-a-list-to-a-stored-procedure][1]