using System;

using System.Data;

using System.Collections;

using System.Collections.Generic;

using System.Configuration;

using System.Reflection;

using System.Linq;

using System.Xml.Linq;

namespace UserFunction

{    

/// <summary>    

/// Summary description for LinqToDataTable    

/// </summary>    

static public  class LinqToDataTable    

{        

static public  DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate<T> fn)        

{

            DataTable dtReturn = new DataTable();

            // column names

            PropertyInfo[] oProps = null;

            // Could add a check to verify that there is an element 0

            foreach (T rec in varlist)            

{

                // Use reflection to get property names, to create table, Only first time, others will follow

                if (oProps == null)               

  {

                    oProps = ((Type)rec.GetType()).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));

                    }

                }

                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);

        }

        public delegate object[] CreateRowDelegate<T>(T t);     } }

/* * 示例: * var query = from ....; * DataTable dt = query.ToDataTable(rec => new object[] { query }); * */

相关文章:

  • 2022-12-23
  • 2021-06-20
  • 2021-12-02
  • 2021-06-12
  • 2022-01-08
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-18
  • 2021-10-29
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案