Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Convert a LINQ result to DATATABLE?

Tags:

c#

linq

datatable

Is there any way to convert the result of a LINQ expression to a DataTable without stepping through each element?

like image 201
Kishore Kumar Avatar asked Dec 13 '25 07:12

Kishore Kumar


1 Answers

Credit to this blogger, but I've improved on his algorithm here. Make yourself an extension method:

    public static DataTable ToADOTable<T>(this IEnumerable<T> varlist)
    {
        DataTable dtReturn = new DataTable();
        // Use reflection to get property names, to create table
        // column names
        PropertyInfo[] oProps = typeof(T).GetProperties();
        foreach (PropertyInfo pi in oProps)
        {
            Type colType = pi.PropertyType; 
            if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>)))
                colType = colType.GetGenericArguments()[0];
            dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
        }
        foreach (T rec in varlist)
        {
            DataRow dr = dtReturn.NewRow();
            foreach (PropertyInfo pi in oProps)
                dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null);
            dtReturn.Rows.Add(dr);
        }

        return (dtReturn);
    }

Usage:

DataTable dt = query.ToADOTable();
like image 80
Shaul Behr Avatar answered Dec 14 '25 19:12

Shaul Behr