2011-05-18 59 views
0

我生成从一个存储过程,在下面的格式输出一个DataTable的报告:C#模型对象对于报告

id | date | value 
-------------------------- 
0  | 5/18/11 | 10 
0  | 5/19/11 | 13 
0  | 5/20/11 | 7 
0  | 5/21/11 | 1 
1  | 5/18/11 | 9 
1  | 5/19/11 | 34 
1  | 5/20/11 | 5 
1  | 5/21/11 | 6 

其中ID对应于员工的ID号。

我不喜欢在整个代码中处理原始数据表,但我不知道在C#中某种模型对象中最有效地表示这些信息的最佳方式。你会怎么做?

回答

1

简单地使一类...

public class ReportModel 
{ 
    public int ID {get; private set;} 
    public DateTime Date {get; private set;} 
    public int Value {get; private set;} 

    private ReportModel() {} 

    public static ReportModel FromDataRow(DataRow dataRow) 
    { 
     return new ReportModel 
     { 
      ID = Convert.ToInt32(dataRow["id"]), 
      Date = Convert.ToDateTime(dataRow["date"]), 
      Value = Convert.ToInt32(dataRow["value"]) 
     }; 
    } 

    public static List<ReportModel> FromDataTable(DataTable dataTable) 
    { 
     var list = new List<ReportModel>(); 

     foreach(var row in dataTable.Rows) 
     { 
      list.Add(ReportModel.FromDataRow(row); 
     } 

     return list; 
    } 
} 

您还可以使用AutoMapper封装从DataRow中的映射ReportModel。

+0

但是这并没有考虑到id的分组,以使它更容易处理。我想知道的是人们通常如何用C#建模这样的类? – 2011-05-18 17:33:25

+0

您可以使用Dictionary对象...字典中的键是ID,字典中的值可以是具有两个属性(日期和值)的自定义类型。 – ctorx 2011-05-18 20:07:52