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

浙公网安备 33010602011771号