将DataTable转换为通用列表

时间:2013-08-25 08:10:49

标签: c# list datatable generic-list

我在dataService层中有一个下面的方法:

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

    }

因为我应该在业务层添加(使用Data)名称空间。我想把它改成:

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 个答案:

答案 0 :(得分:2)

这样可以解决问题

lst.Add(dt);

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

DataSet本身是DataTable的集合。那么为什么要使用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 :(得分: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();

然后从我们的方法

返回此列表

答案 2 :(得分:1)

因为table是2D矩阵,所以我们应该返回2D List:

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 ;

    }