Linq:轉換成 DataTable

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



 


 

  • 如果您覺得這篇文章有幫助,請您幫忙推薦一下或按上方的""給予支持,非常感激
  • 歡迎轉載,但請註明出處
  • 文章內容多是自己找資料學習到的心得,如有不詳盡或錯誤的地方,請多多指教,謝謝