C# 类型转换
将List[System.Object] 转换为List[Models.BIZ_Order]
前提条件:1.BIZ_Order是类名,但是是动态的;
2.List[System.Object]中的object 是由Models.BIZ_Order生成的;
有兴趣的看看代码:
public static T pkFun<T>(T t) where T : new()
{
var vc = Initialization.nSMod.ClassModels.Find(s => s.Name == t.GetType().Name);
var vb = vc.MemmberModels.Find(s => (s.ForeignKeyModels != null && s.ForeignKeyModels.Count > 0));
var pkName = GetPKName(t);
var pkValue = t.GetType().GetProperty(pkName).GetValue(t, null);//获取主键的值;
foreach (var vf in vb.ForeignKeyModels)
{
var v = Initialization.nSMod.ClassModels.Find(s => s.ID == vf.ClassID);
var parameter = new SqlParameter(string.Format("@{0}", vf.MemmberName), pkValue);
var sql = new StringBuilder();
sql.AppendFormat("select * from {0} where {1} = @{1}", v.Name, vf.MemmberName);
var dt = IDataSourceTypeFactory.Create().ExecuteTable(CommandType.Text, sql.ToString(), parameter);
Type classT = Type.GetType("Models." + v.Name);//获取同名类---classT;
var obj = Activator.CreateInstance(classT);
dynamic teacher = classT.IsInstanceOfType(obj) ? obj : null;
List<dynamic> objs = new List<dynamic>();
foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn c in dt.Columns)
{
var prop = obj.GetType().GetProperty(c.ColumnName);
var value = dr[c.ColumnName];
if (value.ToString() == "") value = null;
prop.SetValue(obj, value, null);
}
objs.Add(teacher);
}
foreach (var vx in t.GetType().GetProperties())
{
if (vx.Name == "List_" + vf.MemmberName + "_" + v.Name)
{
t.GetType().GetProperty(vx.Name).SetValue(t, objs, null);
break;
}
}
}
return t;
}
objs中存储的怎么才能是"Models." + v.Name呢?