将DataTable转换为通用列表

3

我在数据服务层有以下方法:

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
您正在添加一个单独的DataTable对象,请使用List.Add()。 - Oliver
你确定要创建一个 DataTable 的 List(Of) 吗?还是你想从 DataTable 中提取出一组行的 List(Of)? - Steve
1
@Steve 嗯,我认为 List(Of Rows) 更好!因为我想要一个二维矩阵。现在我该怎么办? - Iran_Girl
最佳方法是投资一些时间来实现ORM工具。您可以轻松使用Dapper.Dot.Net(简单,快速且真正的救星),或选择更复杂的一个(但具有更多功能),例如Entity Framework - Steve
3个回答

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
请尝试以下内容。
public List<DataRow> retTable()
{
    DataTable dt = new DataTable();
    adap.Fill(dt);
    return dt.AsEnumerable().ToList();
}

但是由于DataRow,您仍然需要使用system.Data

在这种情况下,您可以像以下示例一样使用自定义类

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代码。你能给我精确的代码吗? - Iran_Girl

1

因为表格是二维矩阵,所以我们应该返回二维列表:

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 ;

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接