正在为列数未知的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
}
}
我上面提到的方法有多好?请分享想法/替代
感谢
我会自己做下面的事情。
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;
}
}
我已经从这里复制了列表到数据表的转换逻辑。