Как я могу конвертировать IEnumerable <MyClass>в DataTable очень быстро? - PullRequest
0 голосов
/ 26 июня 2011

Я знаком с методом отражения, который преобразует любой IEnumerable в DataTable, но он очень, очень медленный! Когда я получаю не большой, но большой кусок данных, у меня очень медленная реакция браузера, потому что это очень сложные данные для обработки.

Мне нужно повысить свое преимущество, как мне это сделать? PS: проверил LazyLoading DataTable там безуспешно, эфир, может кто-то покажет мне, как это сделать?

Большое спасибо заранее.

1 Ответ

2 голосов
/ 26 июня 2011

См. эту статью для подробного объяснения.

Пример кода ядра

 public static DataTable ToDataTable<T>(this IEnumerable<T> collection)
    {
        DataTable dt = new DataTable();
        Type t = typeof(T);
        PropertyInfo[] pia = t.GetProperties();
        //Create the columns in the DataTable
        foreach (PropertyInfo pi in pia)
        {
            if ((pi.PropertyType.IsGenericType) )
            {
                Type typeOfColumn = pi.PropertyType.GetGenericArguments()[0];
                dt.Columns.Add(pi.Name, typeOfColumn);
            }
            else
                dt.Columns.Add(pi.Name, pi.PropertyType);
        }
        //Populate the table
        foreach (T item in collection)
        {
            DataRow dr = dt.NewRow();
            dr.BeginEdit();
            foreach (PropertyInfo pi in pia)
            {
                dr[pi.Name] = pi.GetValue(item, null);
            }
            dr.EndEdit();
            dt.Rows.Add(dr);
        }
        return dt;
    }
}

Почему вы думаете, что преобразование данных замедляет ваше приложение? Ваш профиль это?

...