Why Convert List to DataTable?

Here are some common scenarios where this conversion becomes necessary.

Sample Class

Let’s say you have a simple class like this.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

You have a list of Person.

List<Person> people = new List<Person>
	{
		new Person { Id = 1, Name = "Alice", BirthDate = new DateTime(1990, 1, 1) },
		new Person { Id = 2, Name = "Bob", BirthDate = new DateTime(1995, 5, 23) },
		new Person { Id = 3, Name = "Nic", BirthDate = new DateTime(1990, 2, 10) },
		new Person { Id = 4, Name = "Jon", BirthDate = new DateTime(1994, 3, 4) }
	};

You can create an extension method to convert any List<T> to a DataTable.

public static class ListToDataTableConverter
{
    public static DataTable ToDataTable<T>(this List<T> items)
    {
        DataTable table = new DataTable(typeof(T).Name);
        try
        {
        PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        foreach (var prop in properties)
        {
            Type propType = Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType;
            table.Columns.Add(prop.Name, propType);
        }

        foreach (var item in items)
        {
            var values = properties.Select(p => p.GetValue(item, null)).ToArray();
            table.Rows.Add(values);
        }
        
        }
        catch (Exception)
        {

            table = new DataTable();
        }

        return table;
    }
}

Using the Method here using Blazor application.

protected override void OnInitialized()
{
    DataTable dataTable = getData();
}

private DataTable getData()
{
    List<Person> people = new List<Person>
    {
        new Person { Id = 1, Name = "Alice", BirthDate = new DateTime(1990, 1, 1) },
        new Person { Id = 2, Name = "Bob", BirthDate = new DateTime(1995, 5, 23) },
        new Person { Id = 3, Name = "Nic", BirthDate = new DateTime(1990, 2, 10) },
        new Person { Id = 4, Name = "Jon", BirthDate = new DateTime(1994, 3, 4) }
    };

    DataTable dataTable = people.ToDataTable();

    return dataTable;
}

Output

Output

Advantages

Tips

Conclusion

This technique is a lifesaver when working with ADO.NET, reporting, or data exports in enterprise applications. By using reflection, we avoid hardcoding columns and make the method generic and reusable.