How to Convert a LINQ result to DATATABLE?

前端 未结 2 2105
情歌与酒
情歌与酒 2020-12-18 13:02

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

2条回答
  •  生来不讨喜
    2020-12-18 13:43

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

        public static DataTable ToADOTable(this IEnumerable 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();
    

提交回复
热议问题