Linq:轉換成 DataTable
最近剛好同事有問到 如何將使用Linq 查詢出來的資料轉換成 DataTable,
這邊附上簡單的語法
using System.Collections;
using System.Data;
using System.Reflection;
/// <summary>
/// IEnumerable 擴充方法
/// </summary>
public static class IEnumerableExtensions
{
/// <summary>
/// 將 IEnumerable 轉換至 DataTable
/// </summary>
/// <param name="list">IEnumerable</param>
/// <returns>DataTable</returns>
public static DataTable ToDataTable(this IEnumerable list)
{
DataTable dt = new DataTable();
bool schemaIsBuild = false;
PropertyInfo[] props = null;
foreach (object item in list)
{
if (!schemaIsBuild)
{
props = item.GetType().GetProperties();
foreach (var pi in props)
{
dt.Columns.Add(new DataColumn(pi.Name, pi.PropertyType));
}
schemaIsBuild = true;
}
var row = dt.NewRow();
foreach (var pi in props)
{
row[pi.Name] = pi.GetValue(item, null);
}
dt.Rows.Add(row);
}
dt.AcceptChanges();
return dt;
}
}
請先建立一個新的類別,建議類別名稱 IEnumerableExtensions,
然後複製上面的語法。
這樣每次在查詢 IEnumerable 時就會多出一個 ToDataTable 方法,回傳型別就是 DataTable
使用範例
string[] demoData = new string[] { "a", "b" };
DataTable dt = demoData.ToDataTable();
- 如果您覺得這篇文章有幫助,請您幫忙推薦一下或按上方的"讚"給予支持,非常感激
- 歡迎轉載,但請註明出處
- 文章內容多是自己找資料學習到的心得,如有不詳盡或錯誤的地方,請多多指教,謝謝