拿EF模型并将其转换为数据表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拿EF模型并将其转换为数据表?相关的知识,希望对你有一定的参考价值。

我有一个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'
答案

你可以选择:

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循环..

以上是关于拿EF模型并将其转换为数据表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将表达式树转换为部分 SQL 查询?

在EF代码中使用View首先与迁移冲突

当我从用户获取数据并将其保存到 SQLite 数据库中时,我应该怎么做才能使列表视图在片段中工作

如何从可枚举转换为特定模型

对数据进行去均值并转换为 numpy 数组

着色器将 uint8 转换为浮动,并将其重新解释回 uint