Преобразование списка в данные занимает больше времени - PullRequest
0 голосов
/ 29 августа 2018

Как лучше всего передать список (т.е. общий список) в хранимую процедуру, используя 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 голосов
/ 29 августа 2018

Я бы сделал это, создав пользовательский тип таблицы. Я думаю, что было бы лучше и быстрее.

Источник: [/8308275/c-sql-server-peredacha-spiska-hranimoi-protsedure][1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...