Взять модель EF и преобразовать ее в Datatable? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть базовая модель EF, которую нужно преобразовать в таблицу данных, но я не хочу вручную отображать ее самостоятельно, если это возможно.

Я нашел этот код в ответе стека

 private static DataTable CreateDataTable<T>(IEnumerable<T> list)
        {
            Type type = typeof(T);
            var properties = type.GetProperties();

            DataTable dataTable = new DataTable();
            foreach (PropertyInfo info in properties)
            {

                dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
            }

            foreach (T entity in list)
            {
                object[] values = new object[properties.Length];
                for (int i = 0; i < properties.Length; i++)
                {
                    values[i] = properties[i].GetValue(entity);
                }

                dataTable.Rows.Add(values);
            }

            return dataTable;
        }

однако у меня есть свойства, которые, конечно, ссылаются на другие классы, и я думаю, что они выбираются, когда я получаю такую ​​ошибку.

The type of column 'Category' is not supported.  The type is 'Category'

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете использовать:

List<PropertyInfo> properties = new List<PropertyInfo>();

foreach (PropertyInfo info in type.GetProperties())
{
    if (info.PropertyType.IsValueType || info.PropertyType == typeof(string))
    {
         dataTable.Columns.Add(new DataColumn(info.Name, Nullable.GetUnderlyingType(info.PropertyType) ?? info.PropertyType));
         properties.Add(info);
    }
}
foreach (T entity in list)
{
     int i = 0;
     object[] values = new object[properties.Count];
     foreach (PropertyInfo info in properties)
     {
         values[i] = properties[i].GetValue(entity);
         i++;
     }

     dataTable.Rows.Add(values);
}

Этот же foreach вы можете использовать в свойствах, поэтому удалите цикл for ..

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