Introduction
In this article I will describe you how to convert a List objects to a DataTable.
Step 1 : Create a console application and add the Student class with the properties as below.
Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Compare2Objects
{
public class Program
{
static void Main(string[] args)
{
}
}
public class Student
{
public string Name { get; set; }
public int StudentId { get; set; }
public int? Age { get; set; }
}
}
Step 2 : In Main method, create a list of students as below.
Code
List<Student> Students = new List<Student>(){
new Student() { Name = "Jack", Age = 15, StudentId = 100 },
new Student() { Name = "Smith", Age = 15, StudentId = 101 },
new Student() { Name = "Smit", Age = 15, StudentId = 102 }
};
Step 3 : Now we are going to convert this list object to a DataTable. For that we need to create a new class and a conversion method as below.
Code
public class ListtoDataTableConverter
{
public DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
//Setting column names as Property names
dataTable.Columns.Add(prop.Name);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
//put a breakpoint here and check datatable
return dataTable;
}
}
The above method will set the property name as a column name for the DataTable and for each object in the list; it will create a new row in the DataTable and insert values.
Step 4 : Now create an instance of the above class and call the method with the list object from the Main method.
Code
ListtoDataTableConverter converter = new ListtoDataTableConverter();
DataTable dt = converter.ToDataTable(Students);
For the complete source code, please find the attached solution.