正在为列数未知的DataRow创建业务类

本文关键字:DataRow 创建 业务 未知 | 更新日期: 2023-09-27 18:26:47

我有一个存储过程,它返回数据透视列以及表中的列。在执行存储过程之后,我得到了DataTable。现在我想将此DataTable转换为List<'MyClass'>。DataTable有一些已知的列(来自表)和一些未知数量的列,这是透视的结果。

如何创建一个真正代表一个DataRow的类。我的想法如下:

public class TableColumns
{
       public int TableColumn1 { get;set; }
       public string TableColumn2 { get;set; }
       public float TableColumn1 { get;set; }
       //additional columns if any
}
public class PivotColumns
{
       public string ColumnName { get;set; }
       public string Value { get;set; }
       //additional columns if any
}
public class MyClass
{
       public TableColumns tableColumns { get;set; }
       public List<PivotColumns> pivotedColumns { get;set; }
       //overload the [] operator with real implementation
       public string this[string pivotedColumnName] { get;set; }
}

然后用一个助手类进行转换:

public static class ConversionHelper
{
       public static MyClass ConvertDataRowToMyClass(DataRow dataRow)
       {
               // some implementation
       }
       public static DataRow ConvertMyClassToDataRow(MyClass myClass)
       {
               // some implementation
       }
}

我上面提到的方法有多好?请分享想法/替代

感谢

正在为列数未知的DataRow创建业务类

我会自己做下面的事情。

public class TableColumns
{
   public int TableColumn1 { get;set; }
   public string TableColumn2 { get;set; }
   public float TableColumn3 { get;set; }
   //additional columns if any
}
public class PivotColumns
{
   public string PivotColumn1 { get;set; }
   public int PivotColumn2 { get;set; }
   public float PivotColumn3 { get;set; }       
   //additional columns if any
}
public class MyClass : TableColumns, PivotColumns{ }


public static class ConversionHelper
{
   public static List<MyClass> ConvertDataRowToMyClass(DataTable dt)
   {
           // some implementation
           List<MyClass> ltMyClass = (from dr in dataTable.AsEnumerable()
                                         select new MyClass
                                         {
                                             TableColumn1 = dr["TableColumn1"] == DBNull.Value || dr["TableColumn1"] == null ? default(int) : dr.Field<int>("TableColumn1"),
                                             PivotColumn2 = dr.Field<int>("PivotColumn2"),
                                             TableColumn2 = dr.Field<string>("TableColumn2")
                                         }).ToList<MyClass>();
   }
   public static DataTable ConvertMyClassToDataRow(List<MyClass> lstMyClass)
   {
           // some implementation
           PropertyDescriptorCollection properties = 
           TypeDescriptor.GetProperties(typeof(MyClass));
           DataTable table = new DataTable();
           foreach (PropertyDescriptor prop in properties)
                table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
           foreach (T item in data)
           {
               DataRow row = table.NewRow();
               foreach (PropertyDescriptor prop in properties)
                       row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
               table.Rows.Add(row);
           }
           return table;
   }
}

我已经从这里复制了列表到数据表的转换逻辑。