【问题标题】:C# many to one reflection from Datatable or DataRow来自 Datatable 或 DataRow 的 C# 多对一反射
【发布时间】:2014-11-23 09:09:57
【问题描述】:

我有课

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

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

【问题讨论】:

    标签: c# reflection properties datarow propertyinfo


    【解决方案1】:

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

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

    那么您的一对一属性映射的实现可能会起作用。

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 2017-01-30
      • 2012-05-03
      • 2020-03-28
      • 1970-01-01
      • 2010-09-30
      • 2011-05-12
      • 2012-02-06
      相关资源
      最近更新 更多