将Linq的结果集转化成DataTable

/// <summary>
/// 将Linq的结果集转化成DataTable
/// </summary>
/// <param name="query">结果集</param>
/// <returns>DataTable</returns>
public static DataTable ConvertToTable(IQueryable query)
{
DataTable dtList = new DataTable();
bool isAdd = false;
  PropertyInfo[] objProterties = null;
  foreach (var item in query)
  {
    if (!isAdd)
    {
      objProterties = item.GetType().GetProperties();
      foreach (var itemProterty in objProterties)
      {
        Type type = null;
        if (itemProterty.PropertyType != typeof(string) && itemProterty.PropertyType != typeof(int) && itemProterty.PropertyType != typeof(DateTime))
        {
          type = typeof(string);
        }
        else
        {
          type = itemProterty.PropertyType;
        }
        dtList.Columns.Add(itemProterty.Name, type);
    }
    isAdd = true;
  }
  var row = dtList.NewRow();
  foreach (var pi in objProterties)
  {  
    row[pi.Name] = pi.GetValue(item, null);
  }
    dtList.Rows.Add(row);
}

return dtList;
}

 

另外一种做法:

public static DataTable LinqQueryToDataTable<T>(IEnumerable<T> query)

       {

           DataTable tbl = new DataTable();

           PropertyInfo[] props = null;

           foreach (T item in query)

           {

               if (props == null) //尚未初始化

               {

                   Type t = item.GetType();

                   props = t.GetProperties();

                   foreach (PropertyInfo pi in props)

                   {

                       Type colType = pi.PropertyType;

                       //針對Nullable<>特別處理

                       if (colType.IsGenericType && colType.GetGenericTypeDefinition() == typeof(Nullable<>))

                       {

                           colType = colType.GetGenericArguments()[0];

                       }

                       //建立欄位

                       tbl.Columns.Add(pi.Name, colType);

                   }

               }

               DataRow row = tbl.NewRow();

               foreach (PropertyInfo pi in props)

               {

                   row[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value;

               }

               tbl.Rows.Add(row);

           }

           return tbl;

       }

 

posted @ 2012-09-19 11:56  超级塞亚人  阅读(447)  评论(0)    收藏  举报