LinqToDataTable[转]

LinqToDataTable:

 

 

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

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

 来自:http://www.cnitblog.com/MartinYao/archive/2008/05/05/43329.html

 

posted @ 2009-04-14 21:54  Pynix  阅读(388)  评论(0编辑  收藏  举报