亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

實體類和DataTable的轉換

2019-11-14 14:00:05
字體:
來源:轉載
供稿:網友

引子

最近在項目中在數據庫查詢的時間,總是要用到數據表到實體類對象列表的轉化,自己封裝了一個轉換的方法,用起來還比較方便,記下來,以后可以重復使用,原理就主要是利用反射,當然有更好的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;        }    }

更改

在幾位院子里大神的指點下,做了一些修改,以后應該多注意這些細節,感謝@雙魚座和@夢在旅途,修改后的如下

using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Reflection;namespace SolrNetDemo{    /// <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;            }            // 獲得此模型的可寫公共屬性              IEnumerable<PropertyInfo> propertys = new T().GetType().GetProperties().Where(u => u.CanWrite);            list = ConvertToEntity(dt, propertys);            return list;        }        /// <summary>        ///     將DataTable的首行轉換為實體        ///     作者: oldman        ///     創建時間: 2015年9月13日        /// </summary>        /// <param name="dt">待轉換的DataTable</param>        /// <returns></returns>        public T ConvertToEntity(DataTable dt)        {            DataTable dtTable = dt.Clone();            dtTable.Rows.Add(dt.Rows[0].ItemArray);            return ConvertToList(dtTable)[0];        }        private List<T> ConvertToEntity(DataTable dt, IEnumerable<PropertyInfo> propertys)        {            var list = new List<T>();            //遍歷DataTable中所有的數據行              foreach (DataRow dr in dt.Rows)            {                var entity = new T();                //遍歷該對象的所有屬性                  foreach (PropertyInfo p in propertys)                {                    //將屬性名稱賦值給臨時變量                    string tmpName = p.Name;                    //檢查DataTable是否包含此列(列名==對象的屬性名)                        if (!dt.Columns.Contains(tmpName)) continue;                    //取值                      object value = dr[tmpName];                    //如果非空,則賦給對象的屬性                      if (value != DBNull.Value)                    {                        p.SetValue(entity, value, null);                    }                }                //對象添加到泛型集合中                  list.Add(entity);            }            return list;        }    }}

 

確實看清了進步的空間,希望大家多交流,共同進步。

 

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

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线免费| 日韩视频欧美视频| 北条麻妃99精品青青久久| 91精品久久久久久久久青青| 97国产一区二区精品久久呦| 国产精品视频免费观看www| 国产一区二区日韩精品欧美精品| 亚洲欧美另类中文字幕| 久久精品91久久香蕉加勒比| 欧美激情亚洲一区| 国产精品白丝jk喷水视频一区| 狠狠久久五月精品中文字幕| 欧美午夜精品久久久久久人妖| 成人福利视频在线观看| 精品国产乱码久久久久久虫虫漫画| 亚洲天堂成人在线视频| 在线观看精品自拍私拍| 国产在线精品一区免费香蕉| 亚洲精品电影网| 欧美激情一区二区久久久| 国产精品com| 精品一区二区三区三区| 精品自在线视频| 亚洲自拍偷拍第一页| 亚洲色图日韩av| 97国产一区二区精品久久呦| 国产视频精品在线| 亚洲开心激情网| 欧美黑人巨大精品一区二区| 久久久中文字幕| 88国产精品欧美一区二区三区| 欧美激情视频在线| 992tv在线成人免费观看| 久久国产精品电影| 亚洲美女动态图120秒| 日韩精品高清在线| 在线播放精品一区二区三区| 亚洲精品欧美极品| 国产中文字幕日韩| 日韩精品免费观看| 亚洲视频在线观看| 中文国产成人精品| 欧美成人亚洲成人日韩成人| 播播国产欧美激情| 亚洲午夜久久久影院| 国产成人精品电影久久久| 久久久久久久久电影| 亚洲福利小视频| 色诱女教师一区二区三区| 日韩精品视频三区| 久久中文字幕在线视频| 国产在线久久久| 色婷婷综合成人av| 国产精品国产福利国产秒拍| 欧美在线一区二区三区四| 国产日韩亚洲欧美| 亚洲a级在线播放观看| 中文字幕综合一区| 久久久精品一区二区| 久久久久久香蕉网| 日本精品一区二区三区在线播放视频| 国产精品成人播放| 日韩国产在线看| 国产日韩在线看片| 国产ts人妖一区二区三区| 久久影院资源网| 91精品国产乱码久久久久久蜜臀| 中文字幕欧美精品日韩中文字幕| 国产精品成人观看视频国产奇米| 国产精品久久久久久久久久免费| 国产91精品久久久久久| 久久国产精品影片| 成人性教育视频在线观看| 97热在线精品视频在线观看| 国产精品扒开腿做爽爽爽视频| 久久中文精品视频| 热久久这里只有| 亚洲最大的网站| 2019中文字幕免费视频| 在线观看日韩专区| 在线丨暗呦小u女国产精品| 国产成人精品久久久| 国产精品视频午夜| 这里只有精品在线观看| 日本久久久久久久| 国产成人精品久久久| 亚洲日本成人女熟在线观看| 精品无人区乱码1区2区3区在线| 日韩精品极品毛片系列视频| 欧美三级欧美成人高清www| 国内揄拍国内精品少妇国语| 欧美一级黑人aaaaaaa做受| 精品一区二区三区四区在线| 国产这里只有精品| yw.139尤物在线精品视频| 91天堂在线视频| 日韩精品久久久久久福利| 一本一本久久a久久精品综合小说| 亚洲精品视频在线观看视频| 国产v综合v亚洲欧美久久| 日韩大陆欧美高清视频区| 亚洲高清久久久久久| 日韩成人小视频| 91在线免费视频| 欧美日本中文字幕| 78色国产精品| 欧美韩国理论所午夜片917电影| 日韩av在线导航| 影音先锋日韩有码| 日韩美女写真福利在线观看| 国产日韩欧美在线看| 欧美高清videos高潮hd| 日韩在线观看网址| 国产欧美日韩精品专区| 精品网站999www| 深夜福利日韩在线看| 欧美日韩精品国产| 91久久精品美女| 国产精品扒开腿做爽爽爽的视频| 91高清视频在线免费观看| 欧美精品生活片| 国产欧美日韩中文字幕在线| 亚洲在线观看视频网站| 青青青国产精品一区二区| 国产女人精品视频| 久久久久国产一区二区三区| 国产视频久久久久久久| 97国产在线观看| 97视频免费看| 欧美一区二区三区艳史| 国产午夜精品久久久| 久久亚洲综合国产精品99麻豆精品福利| 国产99视频精品免视看7| 亚洲二区中文字幕| 欧美成人中文字幕| 欧美日产国产成人免费图片| 在线播放亚洲激情| 国产精品一区二区三区久久久| 2018中文字幕一区二区三区| 亚洲欧美成人精品| 国产成人精品一区二区| 92看片淫黄大片欧美看国产片| 国产成人中文字幕| 欧美在线免费看| 国产精品视频不卡| 日韩在线观看网址| 亚洲大胆人体视频| 久久免费视频在线观看| 中日韩美女免费视频网址在线观看| 欧美国产第二页| 亚洲最大成人网色| 国产精品久久久久久久久久久久久| 久久国产精品久久久久久久久久| 日韩电影在线观看免费| 欧美成人激情视频| www.日韩免费| 欧美性极品xxxx做受| 中文字幕欧美视频在线| 国产精品久久久久久久久久久新郎| 精品色蜜蜜精品视频在线观看| 亚洲一区中文字幕在线观看| 免费91在线视频| 国产精品入口夜色视频大尺度| 亚洲第一页自拍|