I have a nested list and I need to convert it to a DataSet in C #. I found many examples about this, but they do not do what I need. I have a list in a list, I need a nested list in another DataTable in a DataSet.
Here is an example list
public class InvoiceResponse(){ public string BillToName { get; set; } public string BillToAddr1 { get; set; } ... ... public List<InvoiceItemResponse> Items { get; set; } }
I used the code below to convert a list to a DataSet, but it did not convert the items in a DataTable to a DataSet
public DataSet CreateDataSet<T>(List<T> list) { //list is nothing or has nothing, return nothing (or add exception handling) if (list == null || list.Count == 0) { return null; } //get the type of the first obj in the list var obj = list[0].GetType(); //now grab all properties var properties = obj.GetProperties(); //make sure the obj has properties, return nothing (or add exception handling) if (properties.Length == 0) { return null; } //it does so create the dataset and table var dataSet = new DataSet(); var dataTable = new DataTable(); //now build the columns from the properties var columns = new DataColumn[properties.Length]; for (int i = 0; i < properties.Length; i++) { columns[i] = new DataColumn(properties[i].Name, properties[i].PropertyType); } //add columns to table dataTable.Columns.AddRange(columns); //now add the list values to the table foreach (var item in list) { //create a new row from table var dataRow = dataTable.NewRow(); //now we have to iterate thru each property of the item and retrieve it value for the corresponding row cell var itemProperties = item.GetType().GetProperties(); for (int i = 0; i < itemProperties.Length; i++) { dataRow[i] = itemProperties[i].GetValue(item, null); } //now add the populated row to the table dataTable.Rows.Add(dataRow); } //add table to dataset dataSet.Tables.Add(dataTable); //return dataset return dataSet; }
How to convert a list of Items to another DataTable in a DataSet?
source share