C#从Datatable或DataRow反射多次

时间:2014-09-29 03:18:44

标签: c# reflection properties datarow propertyinfo

我有一个班级

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]);
 }
}

我只需要对此进行改进以处理前面提到的情况 (一旦我理解了核心逻辑,我可以稍后清理)

1 个答案:

答案 0 :(得分:0)

您可以在dataTable中拥有Name和Phone所需的列。

为Name和Phone添加两个新列,并将其定义为与属性使用的逻辑相同的列。 如果从数据库Select语句加载此dataTable,则在SQL语句本身中为Name和Phone添加两个新列,其逻辑与您用于属性的逻辑相同。

然后,您对一对一属性映射的实现可能有效。