我有一个类
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]);
}
}
我只需要改进这一点来处理前面提到的情况
(一旦我理解了核心逻辑,我可以稍后进行清理)
您可以在dataTable中拥有Name和Phone所需的列。
为Name和Phone添加两个新列,并将其定义为与用于属性的逻辑相同。如果要从数据库Select语句加载此dataTable,请在SQL语句本身中添加两个新列Name和Phone,其逻辑与用于属性的逻辑相同。
然后,一对一属性映射的实现就可以工作了。