程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 實體類和DataTable的轉換,實體datatable轉換

實體類和DataTable的轉換,實體datatable轉換

編輯:C#入門知識

實體類和DataTable的轉換,實體datatable轉換


引子

最近在項目中在數據庫查詢的時間,總是要用到數據表到實體類對象列表的轉化,自己封裝了一個轉換的方法,用起來還比較方便,記下來,以後可以重復使用,原理就主要是利用反射,當然有更好的ORM框架可以實現,主要的原因就是我這裡沒有用orm。

實現

話不多少,直接上實現代碼

 /// <summary>
    /// 數據表轉換類
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class DbTableConvertor<T> where T : new()
    {
        /// <summary>
        /// 將DataTable轉換為實體列表
        /// 作者: oldman
        /// 創建時間: 2015年9月13日
        /// </summary>
        /// <param name="dt">待轉換的DataTable</param>
        /// <returns></returns>
        public List<T> ConvertToList(DataTable dt)
        {
            // 定義集合  
            var list = new List<T>();

            if (0 == dt.Rows.Count)
            {
                return list;
            }

            //遍歷DataTable中所有的數據行  
            foreach (DataRow dr in dt.Rows)
            {
                var entity = new T();

                // 獲得此模型的公共屬性  
                var propertys = entity.GetType().GetProperties();

                //遍歷該對象的所有屬性  
                foreach (var p in propertys)
                {
                    //將屬性名稱賦值給臨時變量
                    string tmpName = p.Name;

                    //檢查DataTable是否包含此列(列名==對象的屬性名)    
                    if (dt.Columns.Contains(tmpName))
                    {
                        // 判斷此屬性是否有Setter
                        if (!p.CanWrite)
                        {
                            continue; //該屬性不可寫,直接跳出
                        }

                        //取值  
                        var value = dr[tmpName];

                        //如果非空,則賦給對象的屬性  
                        if (value != DBNull.Value)
                        {
                            p.SetValue(entity, value, null);
                        }
                    }
                }
                //對象添加到泛型集合中  
                list.Add(entity);
            }

            return list;
        }

        /// <summary>
        /// 將DataTable的首行轉換為實體
        /// 作者: oldman
        /// 創建時間: 2015年9月13日
        /// </summary>
        /// <param name="dt">待轉換的DataTable</param>
        /// <returns></returns>
        public T ConvertToEntity(DataTable dt)
        {
            var entity = new T();

            if (0 == dt.Rows.Count)
            {
                return entity;
            }

            // 獲得此模型的公共屬性  
            var propertys = entity.GetType().GetProperties();

            //遍歷該對象的所有屬性  
            foreach (var p in propertys)
            {
                //將屬性名稱賦值給臨時變量
                string tmpName = p.Name;

                //檢查DataTable是否包含此列(列名==對象的屬性名)    
                if (dt.Columns.Contains(tmpName))
                {
                    // 判斷此屬性是否有Setter
                    if (!p.CanWrite)
                    {
                        continue; //該屬性不可寫,直接跳出
                    }

                    //取值  
                    var value = dt.Rows[0][tmpName];

                    //如果非空,則賦給對象的屬性  
                    if (value != DBNull.Value)
                    {
                        p.SetValue(entity, value, null);
                    }
                }
            }

            return entity;
        }
    }

注釋的都很清楚,歡迎拍磚。

本人的.NET學習技術交流群:226704167

努力學習,只為一個夢想。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved