【问题标题】:Convert DataTable to Generic List [closed]将 DataTable 转换为通用列表 [关闭]
【发布时间】:2013-08-25 08:10:48
【问题描述】:

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

我该如何解决?

【问题讨论】:

  • 您正在添加一个 DataTable 对象,使用 List.Add()
  • 您确定要创建一个列表(数据表)吗?还是您想要从 DataTable 中提取 List(Of Rows)?
  • @Steve 嗯,我认为 List(Of Rows) 更好!因为我想要二维矩阵。现在我该怎么办?
  • 最好的方法是投入一些时间来实现 ORM 工具。您可以轻松使用Dapper.Dot.Net(简单、快速和真正的救命稻草)或选择更复杂的(但功能更多),例如Entity Framework

标签: c# list datatable generic-list


【解决方案1】:

这样就可以解决问题了

lst.Add(dt);

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

但是DataSet 本身是DataTables 的集合。那么为什么要使用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;
}

【讨论】:

    【解决方案2】:

    下面试试

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

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

    【讨论】:

    • 因为这个方法是public的,所以列数和类名是未知的。不幸的是,我不知道通用列表中的 lambda 代码。你能给我确切的代码吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-07
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 2010-10-08
      相关资源
      最近更新 更多