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);

我该如何解决?

4

3 回答 3

2

这将解决问题

lst.Add(dt);

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

然而DataSet,它本身是DataTables 的集合。那为什么要通过使用来重新发明轮子ListDataSet像这样简单地返回

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;
}
于 2013-08-25T08:16:13.210 回答
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();

然后从我们的方法中返回这个列表

于 2013-08-25T08:27:58.097 回答
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 ;

    }
于 2013-08-25T16:37:58.357 回答