Introduction
In this article, I will describe to 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.
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.
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.
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.
ListtoDataTableConverter converter = new ListtoDataTableConverter();
DataTable dt = converter.ToDataTable(Students);Â Â
For the complete source code, please find the attached solution.