拿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模型并将其转换为数据表?的主要内容,如果未能解决你的问题,请参考以下文章