从Datarow创建对象

时间:2012-05-10 07:42:18

标签: design-patterns c#-4.0 datatable

我想从DataRow对象创建一个对象。可以通过遍历Datarow对象来完成。但这里的约束是DataRow列不固定。 DataRow可以有的列数没有变化。我无法根据ColumnName遍历DataRow,因为我不知道所有列都将在datarow中。

例如我有一个班级

class Abc
{
    string attrib1;
    string attrib2;
    string attrib2;

    public Abc(DataRow dr)
    {
        attrib1 = dr["attrib1"].ToString();
        attrib2 = dr["attrib2"].ToString();
        attrib3 = dr["attrib3"].ToString();
    }
}

当DataRow对象具有所有三列时,这将正常工作。 但如果没有,那么这将抛出异常

请帮帮我。

我尝试在构造函数中使用switch case,如下所示

class Abc
{
    string attrib1;
    string attrib2;
    string attrib2;

    public Abc(DataRow dr)
    {
         foreach (System.Data.DataColumn dc in record.Columns)
             {
                  switch (dc.ColumnName)
                  { 
                case "attrib1" :
                    attrib1 = dr["attrib1"].ToString();
                    break;
                case "attrib2" :
                    attrib2 = dr["attrib2"].ToString();
                    break;
                case "attrib2" :
                    attrib3 = dr["attrib3"].ToString();
                    break;
            } 
                  }  
           } 
     }      

虽然工作正常但我想知道这种方法是否合适。

请帮助解决这个问题

谢谢

3 个答案:

答案 0 :(得分:0)

我认为切换案例没问题,但是,添加default标签并在那里抛出异常是个好主意。在向查询添加新列时,这将为您节省大量的调试工作。

答案 1 :(得分:0)

算法并不好。

1-请将您的“attrib1”,“attrib2”,“attrib3”作为常数。

2-请参阅伪代码:

if (dr[CONSTANT_ATT1] != null) then attrib1 = dr[CONSTANT_ATT1].ToString();
if (dr[CONSTANT_ATT2] != null) then attrib2 = dr[CONSTANT_ATT2].ToString();
if (dr[CONSTANT_ATT3] != null) then attrib3 = dr[CONSTANT_ATT3].ToString();

答案 2 :(得分:0)

如果您只想要这些值,您只需使用此行代码将DataRow作为对象数组

object[] itemArray = dr.ItemArray;