2015-04-28 2 views
0

Я ищу способ скомпоновать набор данных для заполнения набора. Список данных в DataSet может быть в нескольких таблицах данных в DataSet. У меня есть объект, который имеет список имен столбцов, которые необходимы. Если я зациклирую объект на набор данных, он не сработает.DataSet для заполнения списка <T>

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.

+0

Вы должны явно указать, какой тип данных можно преобразовать в список типов –

+0

Данные могут быть во всех или в одном из данных, в соответствующей системе пользователь загружает несколько CSV, а затем преобразует их в datatables в наборе данных. Они соответствуют объекту именам столбцов в данных. –

+0

Вам нужно будет написать условный блок –

ответ

1

Просто добавьте еще один цикл по DataTables из набора данных:

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 вне цикла итерации строк. Поэтому, независимо от количества строк в вашем файле, в список будет добавлен только один объект.

Похоже, что это должно быть внутри цикла, итерации по строкам.

+0

Решение, которое вы доказали, не будет работать, если данные находятся в другом Datatable, список будет заполнен отсутствующими данными. –

+0

@TimMorford не уверен, что у меня есть точка. Можете ли вы предоставить примерную структуру набора данных с несколькими таблицами, которые вы ожидаете? Почему, по вашему мнению, это будут некоторые «недостающие данные»? –

Смежные вопросы