国产97色在线|亚洲-欧美人妻另类制服丝袜-欧美人成国产91视频-殷素素一女战二夫|www.ycjrc.net

C# DataTable 轉換 Model實體類,DataTable 轉換 List<>集合

發布時間:2020-11-30 11:57 作者:獨孤劍 閱讀:3482

C# DataTable 轉換 Model實體類,DataTable 轉換 List<>集合
using System;
using System.Collections.Generic;
using System.Data;
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創建一個新的DataTable
            DataTable dt = new DataTable("User");
            dt.Columns.Add("UserName", typeof(string));
            dt.Columns.Add("Password", typeof(string));
            dt.Columns.Add("Age", typeof(int));

            for (int i = 0; i < 5; ++i)
            {
                DataRow dr = dt.NewRow();
                dr["UserName"] = "用戶名" + i.ToString();
                dr["Password"] = "密碼" + i.ToString();
                dr["Age"] = 20;
                dt.Rows.Add(dr);

                // DataTable 轉換為實體
                User user = DataTableToModel<User>(dt);
            }

            // DataTable 轉換為List
            List<User> users = DataTableToList<User>(dt);
        }

        /// <summary>
        /// DataTable -> Model
        /// </summary>
        /// <typeparam name="T">數據項</typeparam>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        public static T DataTableToModel<T>(DataTable dt) where T : new()
        {
            try
            {
                if (dt == null || dt.Rows.Count == 0)
                {
                    return default(T);
                }

                T t = new T();
                // 獲取行數據
                DataRow dr = dt.Rows[0];
                // 獲取欄目
                DataColumnCollection columns = dt.Columns;
                // 獲得此模型的公共屬性
                PropertyInfo[] propertys = t.GetType().GetProperties();
                foreach (PropertyInfo pi in propertys)
                {
                    string name = pi.Name;
                    // 檢查DataTable是否包含此列    
                    if (columns.Contains(name))
                    {
                        if (!pi.CanWrite) continue;

                        object value = dr[name];
                        if (value != DBNull.Value)
                        {
                            pi.SetValue(t, value, null);
                        }
                    }
                }
                return t;
            }
            catch
            {
                throw;
            }
        }

        /// <summary>
        /// DataTable -> List
        /// </summary>
        /// <typeparam name="T">數據項</typeparam>
        /// <param name="dt">DataTable</param>
        /// <returns></returns>
        public static List<T> DataTableToList<T>(DataTable dt) where T : new()
        {
            try
            {
                if (dt == null || dt.Rows.Count == 0)
                {
                    return new List<T>();
                }

                // 定義集合
                List<T> list = new List<T>();

                // 獲取欄目
                DataColumnCollection columns = dt.Columns;
                foreach (DataRow dr in dt.Rows)
                {
                    T t = new T();
                    // 獲得此模型的公共屬性
                    PropertyInfo[] propertys = t.GetType().GetProperties();
                    foreach (PropertyInfo pi in propertys)
                    {
                        string name = pi.Name;
                        // 檢查DataTable是否包含此列    
                        if (columns.Contains(name))
                        {
                            if (!pi.CanWrite) continue;

                            object value = dr[name];
                            if (value != DBNull.Value)
                            {
                                pi.SetValue(t, value, null);
                            }
                        }
                    }
                    list.Add(t);
                }
                return list;
            }
            catch
            {
                throw;
            }
        }
    }

    /// <summary>
    /// 用戶
    /// </summary>
    public class User
    {
        /// <summary>
        /// 用戶名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 密碼
        /// </summary>
        public string Password { get; set; }

        /// <summary>
        /// 年齡
        /// </summary>
        public int Age { get; set; }
    }
}

微信打賞, 微信掃一掃

支付寶打賞, 支付寶掃一掃

如果文章對您有幫助,歡迎給作者打賞

作者最新文章
開發過程中解決360兼容模式瀏覽器的方法
云南象群向西南方向遷移,云南離群獨象距離象群約12公里
吉林做網站最低價格,吉林企業網站建設價格低至500元起
守象人直擊云南象群最新動向
網站影響百度蜘蛛抓取量的因素有哪些?為什么我的網站Baidu蜘蛛來的次數少?
企業名片
在線客服