【问题标题】:DataSet to fill List<T>数据集填充 List<T>
【发布时间】:2015-04-28 23:37:58
【问题描述】:

我正在寻找一种循环 DataSet 以填充集合的方法 列出 DataSet 中的数据可能位于 DataSet 中的多个 DataTables 中。我有一个对象,其中包含所需的列名列表。如果我将对象循环到数据集,它将不起作用。

public List<Customer> BuildCustomerListMultiFile(DataSet ds, Customer oCustomer)
    {
        List<Customer> lCustomers = new List<Customer>();
        foreach (PropertyInfo p in typeof(Customer).GetProperties())
        {
            Customer oC = new Customer();
            foreach(DataTable dt in ds.Tables)
            { 
                foreach (DataRow dr in dt.Rows)
                {

                    foreach (DataColumn dc in dt.Columns)
                    {
                        if (p.Name == dc.ColumnName)
                        {
                            p.SetValue(oC, dr[dc].ToString());
                        }
                    }
                }
            }
            lCustomers.Add(oC);
        }
        return lCustomers;
    }

我确实看过 How to Convert DataTable to List using Reflections 如果我使用的是 DataTable,这将起作用,但我不确定如何使其与具有多个 DataTables 的 DataSet 一起使用。

【问题讨论】:

  • 你必须明确告诉将哪个数据表转换为哪种类型的列表
  • 数据可以在所有或一个数据表中,这是一个匹配系统,人们上传多个 csv,然后将它们转换为数据集中的数据表。它们将对象与数据表中的列名相匹配。
  • 你必须写条件块

标签: c# reflection dataset


【解决方案1】:

只需通过数据集的数据表再添加一个循环:

foreach(DataTable dt in ds.Tables)
{
    foreach(DataRow dr in dt.Rows)
    {
        Customer oC = new Customer(); 

        foreach(DataColumn dc in dt.Columns)
        {
            if(p.Name == dc.ColumnName)
            {
                p.SetValue(oC, dr[dc].ToString());
            }
        }

        lCustomers.Add(oC);  
    }
}

另请注意:您正在创建并添加到列表您的 oC 之外的循环迭代行。因此,无论数据表中的行数如何,都只会将一个对象添加到列表中。

看起来这应该在循环内迭代行。

【讨论】:

  • 你证明的解决方案不起作用,如果数据在不同的数据表中,列表将填充缺失的数据。
  • @TimMorford 不确定我是否明白你的意思。您能否提供一些包含您期望的多个表的数据集示例结构?为什么你认为会是一些“缺失数据”?
猜你喜欢
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2013-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多