2013-08-25 59 views
2

我在的DataService层以下方法:转换数据表到泛型列表

public DataTable retTable() 
    {    
      DataTable dt = new DataTable(); 
      adap.Fill(dt); 
      return dt;      

    } 

,因为我要补充在业务层(使用数据)的名称空间。我想将其更改为:

public List<DataTable> retTable() 
    { 

     DataTable dt = new DataTable(); 
     adap.Fill(dt); 
     List<DataTable> lst = new List<DataTable>(); 
     lst.AddRange(dt); 
     return lst ; 

    } 

,但我有

lst.AddRange(dt); 

如何解决它的错误?

+3

你添加一个SINGLE DataTable对象,使用List.Add() – Oliver

+0

您确定要创建一个List(DataTable)?或者你想从DataTable中提取一个List(Of Rows)? – Steve

+1

@Steve嗯,我认为List(Of Rows)更好!因为我想要2D矩阵。现在我该怎么办? –

回答

1

返回此列表中,因为表是二维矩阵,所以我们应该回到2D名单:

public List<List<string >> retListTable() 
    { 

     DataTable dt = new DataTable(); 
     adap.Fill(dt); 

     List<List<string>> lstTable = new List<List<string>>(); 

     foreach (DataRow row in dt.Rows) 
     { 
      List<string> lstRow = new List<string>(); 
      foreach (var item in row.ItemArray) 
      { 
       lstRow.Add(item.ToString().Replace("\r\n", string.Empty)); 
      } 
      lstTable.Add(lstRow); 
     } 

     return lstTable ; 

    } 
2

这样就解决了问题

lst.Add(dt); 

通过AddRange(dt)您可以添加的DataTable个集合。

但是DataSet本身是DataTable s的集合。那么为什么通过使用List重新发明轮子。简单地返回DataSet这样

public DataSet retSet() 
{ 
    DataSet ds = new DataSet(); 
    adap.Fill(ds); 
    return ds; 
} 

即使以后你还是要返回列表,你可以做

public List<DataTable> retTable() 
{ 
    DataSet dt = new DataSet(); 
    adap.Fill(ds); 
    List<DataTable> lst = new List<DataTable>(); 
    lst.AddRange(ds.Tables.AsEnumerable()); 
    return lst; 
} 
1

试试下面

public List<DataRow> retTable() 
{ 
    DataTable dt = new DataTable(); 
    adap.Fill(dt); 
    return dt.AsEnumerable().ToList(); 
} 

但你仍然需要system.Data因为DataRow

你可以使用自定义类在这种情况下,像下面

List<MyClass> myClass= new List<MyClass>(); 

myClass = (from DataRow row in dt.Rows 

    select new MyClass 
    { 
     MyProperty1= row["MyColumn1"].ToString(), 
     MyProperty2= row["MyColumn12"].ToString() 

    }).ToList(); 

,然后从我们的方法

+1

,因为这种方法是公开的,列数和类名是未知的。不幸的是,我不知道通用列表中的lambda代码。你能给我确切的代码吗? –