如何从对象中获取数据行

How to get a DataRow from object

我正在尝试重用来自使用 DataRow 而不是对象的项目中的一些代码。在我的新项目中,我创建了模型并且我使用所有对象,但我试图引入那段代码,因为它非常大。所以问题是如何从对象中获取 DataRow。

class Person
{
   public Int64 Id { get; set; }
   public string Name { get; set; }
}

Person p1 = new Person();
p1.Id = 1;
p1.Name = "John";

// How to get a DataRow from this p1 object

drPerson["Id"] == 1
drPerson["Name"] == John

如果可能的话,我正在寻找一种自动完成的方法

谢谢!

所以最后多亏了评论,我得到了这个有效的代码,但它可能会更好

public static DataRow ToDataRow(object from) {

      DataTable dt = new DataTable();

      foreach(PropertyInfo property in from.GetType().GetProperties()) {
         DataColumn column = new DataColumn();

         column.ColumnName = property.Name;
         column.DataType = property.PropertyType;

         dt.Columns.Add(column);

      }

      DataRow dr = dt.NewRow();

      foreach(PropertyInfo property in from.GetType().GetProperties()) {
         dr[property.Name] = property.GetValue(from);
      }

      return dr;
}

使用这些代码,我可以使用列名作为对象属性及其值的 DataRow。

-- 编辑

Usually DataRow objects don't just hang out by themselves. They will belong to a DataTable. This method is creating a throwaway DataTable just to make a row. - siride

没错所以我改成了这个

public static DataRow ToDataRow(object from, DataTable dt) {

      DataRow dr = dt.NewRow();

      foreach(PropertyInfo property in from.GetType().GetProperties()) {
         dr[property.Name] = property.GetValue(from);
      }

      return dr;
}

public static DataTable GetDataTable(object from) {

      DataTable dt = new DataTable();

      foreach(PropertyInfo property in from.GetType().GetProperties()) {
         DataColumn column = new DataColumn();

         column.ColumnName = property.Name;
         column.DataType = property.PropertyType;

         dt.Columns.Add(column);

      }

      return dt;
}

通过此更改,我可以在获取 DataRow 之前检索 DataTable 并同时使用两者