Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 采用EF模型并将其转换为Datatable?_C#_Entity Framework_Datatable - Fatal编程技术网

C# 采用EF模型并将其转换为Datatable?

C# 采用EF模型并将其转换为Datatable?,c#,entity-framework,datatable,C#,Entity Framework,Datatable,我有一个需要转换为数据表的EF核心模型,但如果可能的话,我不想自己手动映射它 我在堆栈答案中找到了这段代码 private static DataTable CreateDataTable<T>(IEnumerable<T> list) { Type type = typeof(T); var properties = type.GetProperties(); DataTable

我有一个需要转换为数据表的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;
        }
你可以选择:

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(type.GetProperties()中的PropertyInfo信息)
{
if(info.PropertyType.IsValueType | | info.PropertyType==typeof(字符串))
{
dataTable.Columns.Add(新的DataColumn(info.Name,null.GetUnderlyingType(info.PropertyType)??info.PropertyType));
属性。添加(信息);
}
}
foreach(列表中的T实体)
{
int i=0;
object[]value=新对象[properties.Count];
foreach(属性中的属性信息)
{
值[i]=属性[i].GetValue(实体);
i++;
}
dataTable.Rows.Add(值);
}

您可以在属性上使用相同的foreach,因此删除for循环..

那么您的意思是删除foreach循环并使用相同的foreach循环?您希望如何转换类类型?如果属性值是数组怎么办?
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);
}