【发布时间】:2018-12-14 13:24:23
【问题描述】:
我创建了一个名为 MyModel 的实体模型的实例,但我需要将此实例用作我的帮助程序类中的类型,以便我可以将数据表转换为动态创建的任何模型。如果我将实际模型显式传递给辅助类,则一切正常:
var data = Helper.DataTableToList<MyActualEntity>(datatable);
但我需要动态地执行此操作。 这是我的助手类
public static class Helper
{
/// <summary>
/// Converts a DataTable to a list with generic objects
/// </summary>
/// <typeparam name="T">Generic object</typeparam>
/// <param name="table">DataTable</param>
/// <returns>List with generic objects</returns>
public static List<T> DataTableToList<T>(this DataTable table) where T : class, new()
{
try
{
List<T> list = new List<T>();
foreach (var row in table.AsEnumerable())
{
T obj = new T();
foreach (var prop in obj.GetType().GetProperties())
{
try
{
PropertyInfo propertyInfo = obj.GetType().GetProperty(prop.Name);
propertyInfo.SetValue(obj, Convert.ChangeType(row[prop.Name], propertyInfo.PropertyType), null);
}
catch
{
continue;
}
}
list.Add(obj);
}
return list;
}
catch
{
return null;
}
}
}
这是我通过表名动态创建实体。它工作正常,直到我需要将它们的类型传递给 Helper 类并且我收到错误 “MyModel is a variable but is used like a type”
var assembly = AppDomain.CurrentDomain.GetAssemblies()
.Where(x => x.FullName.Contains("MyNameSpace.Model")).FirstOrDefault();
var type = assembly.GetTypes()
.FirstOrDefault(t => t.Name == tableName);
if (type != null)
{
System.Data.Entity.DbSet myDbSet = ctx.Set(type);
var MyModel = myDbSet.Create(); <--Entity is created
var data = Helper.DataTableToList<MyModel>(dt); <--Errors here
}
【问题讨论】:
-
如果您有
Type type,您可以使用Invoking static methods containing Generic Parameters using Reflection 和How do I use reflection to call a generic method? 中的机制调用您的Helper.DataTableToList方法。事实上,这可能是重复的,同意吗?
标签: c# entity-framework