DataSet填充List <t>

时间:2015-04-28 15:22:15

标签: c# reflection dataset

我正在寻找一种循环DataSet来填充集合List的方法.DataSet中的数据可以位于DataSet中的多个DataTable中。我有一个对象,其中包含所需的列名列表。如果我将对象循环到数据集,它将无法工作。

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,这将有效,但我不确定如何使用具有多个DataTable的DataSet。

1 个答案:

答案 0 :(得分: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循环行。因此,无论数据表中的行数是多少,都只会将一个对象添加到列表中。

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