我有一个班级
class Person {
public string Name {get; set;}
public int Age {get; set;}
public string Phone {get; set;}
// many other properties
}
此人的数据来自DataRow
,问题是没有一对一的映射,如下所示: -
public DataRow doMapping()
{
DataRow row = new DataRow();
FillDataInto(row);
Person p1 = new Person();
p1.Name = row["FirstName"] + " " + row["LastName"];
p1.Age = row["Age"];
p1.Phone = row["Phone"] + " " + row["Extension"];
p1.Prop1 = row["Prop1"];
p1.PropXY = row["PropXY"];
// many others ...
}
如图所示,某些属性来自我的数据库的不同列。我需要一些帮助来创建一个反射函数来将行属性映射到Person
目前我有以下内容,它将适用于一对一的映射,
(如上例中的Age
): -
public DataRow doMapping(){
DataRow row = new DataRow();
FillDataInto(row);
Person p1 = new Person();
Type type = Person.GetType();
PropertyInfo[] props = type.getProperties();
foreach(PropertyInfo p in props)
{
string name = p.Name;
p.SetValue(p1, row[name]);
}
}
我只需要对此进行改进以处理前面提到的情况 (一旦我理解了核心逻辑,我可以稍后清理)
答案 0 :(得分:0)
您可以在dataTable中拥有Name和Phone所需的列。
为Name和Phone添加两个新列,并将其定义为与属性使用的逻辑相同的列。 如果从数据库Select语句加载此dataTable,则在SQL语句本身中为Name和Phone添加两个新列,其逻辑与您用于属性的逻辑相同。
然后,您对一对一属性映射的实现可能有效。