Перевод DataTable в пользовательский объект и наоборот - PullRequest
0 голосов
/ 27 июня 2011

У меня есть служебный класс, который переводит объекты в DataTables и наоборот. У нас возникают проблемы при загрузке больших объемов данных при преобразовании из DataTable в список объектов. Мы используем пользовательский атрибут, чтобы определять и связывать информацию столбца. Вот псевдокод:

For each row in the table
    For each property in an object
        For each attribute on that property
            If the attribute is our column information attribute
                Grab the data from the table and insert the value into the objects property
            End
        End
    End
End

Для результатов DataTable, содержащих сотни строк, этот процесс занимает минут ... и это просто недопустимо в веб-приложении.

Итак, мой вопрос: есть ли какой-нибудь простой способ перевести DataTable и .NET (пользовательский) объект данных назад и вперед, который не требует много размышлений (возможно, именно в этом вся нагрузка случай)

Редактировать: Оказывается, это была другая проблема в самом объекте данных. Тем не менее, я немного оптимизировал загрузчик с помощью вызовов отражений, так что спасибо всем.

1 Ответ

0 голосов
/ 27 июня 2011

Должен ли он быть динамическим? Если нет, вы можете использовать LINQ to DataSets:

from tr in table.AsQueryable()
select new MyObject
{
   A = tr.Field<string>("A"),
   .
   .
}

В противном случае оно должно зависеть от отражения. Убедитесь, что вы не получаете информацию о типе и свойстве в цикле, так как это может занять некоторое время. То же самое и с атрибутами: рассмотрите возможность создания индекса свойств, которые имеют атрибут перед циклом, затем используйте этот индекс имен свойств, чтобы получить нужные вам свойства. Таким образом, единственным отражением является установка значений в объект.

В качестве альтернативы, вы можете попытаться разгрузить работу, используя асинхронную функцию в ASP.NET, или рассмотрите возможность использования расширений Parallel для использования многоядерной обработки для преобразования.

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