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

首頁 > 編程 > C# > 正文

C#實現DataTable映射成Model的方法(附源碼)

2020-01-24 01:21:43
字體:
來源:轉載
供稿:網友

本文實例講述了C#實現DataTable映射成Model的方法。分享給大家供大家參考,具體如下:

這是數據庫開發中經常遇到的問題,當然,這可以用現成的ORM框架來解決,但有些時候,如果DataSet/DataTable是第三方接口返回的,ORM就不方便了,還得自己處理。

反射自然必不可少的,另外考慮到DataTable中的ColumnName通常與Model的PropertyName并不嚴格對應,可以用Attribute來記錄這種映射關系。

步驟1:先創建一個DataFieldAttribute類

using System;namespace Jimmy.ORM{ [AttributeUsage(AttributeTargets.Property)] public sealed class DataFieldAttribute:Attribute { /// <summary> /// 表對應的字段名 /// </summary> public string ColumnName { set; get; } public DataFieldAttribute(string columnName) {  ColumnName = columnName; } }}

步驟2:在Model/Entity的Class成員上,應用DataField特性,參見下面的代碼:

using System;namespace Jimmy.ORM.Entity{ [Serializable] public class ProductEntity : DataEntityBase { [DataField("PRODUCT_NO")] public string ProductNo { set; get; } [DataField("PRODUCT_ID")] public int ProductId { set; get; } [DataField("PRODUCT_NAME")] public string ProductName { set; get; } public override string ToString() {  return string.Format("ProductNo:{1}{0}ProductId:{2}{0}ProductName:{3}", Environment.NewLine, ProductNo,     ProductId, ProductName); } }}

步驟3:該反射出場了,為了方便起見,封裝了一個DataConvert類

using System;using System.Collections.Generic;using System.Data;using System.Reflection;namespace Jimmy.ORM{ /// <summary> /// 將DataRow/DataTable轉換成Entity/Entity列表 /// </summary> public static class DataConvert<T> where T : DataEntityBase, new() { /// <summary> /// 將DataRow行轉換成Entity /// </summary> /// <param name="dr"></param> /// <returns></returns> public static T ToEntity(DataRow dr) {  T entity = new T();  Type info = typeof(T);  var members = info.GetMembers();  foreach (var mi in members)  {  if (mi.MemberType == MemberTypes.Property)  {   //讀取屬性上的DataField特性   object[] attributes = mi.GetCustomAttributes(typeof(DataFieldAttribute), true);   foreach (var attr in attributes)   {   var dataFieldAttr = attr as DataFieldAttribute;   if (dataFieldAttr != null)   {    var propInfo = info.GetProperty(mi.Name);    if (dr.Table.Columns.Contains(dataFieldAttr.ColumnName))    {    //根據ColumnName,將dr中的相對字段賦值給Entity屬性    propInfo.SetValue(entity,     Convert.ChangeType(dr[dataFieldAttr.ColumnName], propInfo.PropertyType),     null);    }   }   }  }  }  return entity; } /// <summary> /// 將DataTable轉換成Entity列表 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ToList(DataTable dt) {  List<T> list = new List<T>(dt.Rows.Count);  foreach (DataRow dr in dt.Rows)  {  list.Add(ToEntity(dr));  }  return list; } }}

步驟4:測試

using System;using System.Data;using Jimmy.ORM.Entity;namespace Jimmy.ORM.Test{ class Program { static void Main() {  DataTable dt = new DataTable();  dt.Columns.Add("PRODUCT_NO");  dt.Columns.Add("PRODUCT_ID");  dt.Columns.Add("PRODUCT_NAME");  dt.Rows.Add("00001", 1, "手機");  dt.Rows.Add("00002", 2, "服裝");  var products = DataConvert<ProductEntity>.ToList(dt);  foreach (var entity in products)  {  Console.WriteLine(entity);  }  Console.Read(); } }}

完整實例代碼代碼點擊此處本站下載。

希望本文所述對大家C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产高清高潮精品美女| 菠萝蜜影院一区二区免费| 久久影视电视剧免费网站清宫辞电视| 久99九色视频在线观看| 亚洲人成绝费网站色www| 亚洲成人av资源网| 久久久久久97| 日韩精品在线观看一区| 精品久久久久久久久久久久久| 亚洲国产精品久久久久久| 欧美一级在线播放| 日本电影亚洲天堂| 欧美黄网免费在线观看| 精品少妇v888av| 国外成人在线直播| 国产在线一区二区三区| 国产亚洲人成a一在线v站| 日韩大片免费观看视频播放| 久久精品国产精品亚洲| 韩日欧美一区二区| 亚洲欧美另类中文字幕| 91久久精品日日躁夜夜躁国产| 欧美猛男性生活免费| 精品国产一区二区三区久久狼5月| 国产一区二区在线播放| 91在线免费视频| 欧美电影在线观看网站| 丁香五六月婷婷久久激情| 国产极品jizzhd欧美| 2018日韩中文字幕| 欧美电影免费观看网站| 欧美国产日韩中文字幕在线| 亚洲精品国产品国语在线| 亚洲欧洲偷拍精品| 日韩在线观看av| 456亚洲影院| 国产精品∨欧美精品v日韩精品| 97在线免费观看视频| 97人人模人人爽人人喊中文字| 国产精品久久久久久亚洲影视| 国产色婷婷国产综合在线理论片a| 午夜精品免费视频| 91中文精品字幕在线视频| 中文字幕亚洲专区| 亚洲第一av在线| 亚洲天堂久久av| 一色桃子一区二区| 国产精品一区二区3区| 国产91在线播放精品91| 日韩天堂在线视频| 欧美—级a级欧美特级ar全黄| 欧美成人午夜激情视频| 色综合天天综合网国产成人网| 欧美电影电视剧在线观看| 久久久久久久影视| 国产精品91在线| 亚洲国产天堂久久综合网| 久久久视频免费观看| 亚洲一区二区三区在线免费观看| 久久久国产精品一区| 国产亚洲精品美女久久久| 国产精品视频导航| 欧美日韩一二三四五区| 色在人av网站天堂精品| 亚洲欧美在线第一页| 蜜臀久久99精品久久久久久宅男| 亚洲欧美日韩精品久久奇米色影视| 亚洲视频在线视频| 久久国产精品久久久| 综合136福利视频在线| 日韩中文字幕在线免费观看| 亚洲精品国精品久久99热一| 欧美日韩国产成人在线观看| 精品久久香蕉国产线看观看亚洲| 国产亚洲a∨片在线观看| 国产精品99久久久久久人| 日韩精品在线影院| 免费成人高清视频| 亚洲一区av在线播放| 欧洲成人免费视频| 色婷婷久久av| 国产一区二区三区18| 亚洲欧美日韩国产成人| 海角国产乱辈乱精品视频| 国产日韩欧美另类| 日韩高清电影免费观看完整版| 久久久久久久久久国产| 欧美精品在线免费| 91精品免费久久久久久久久| 国产日韩精品在线观看| 黑人极品videos精品欧美裸| 亚洲人成五月天| 色偷偷88888欧美精品久久久| 亚洲精品综合久久中文字幕| 国产精品视频自在线| 国产精品精品一区二区三区午夜版| 精品久久久久久中文字幕| 欧美最顶级丰满的aⅴ艳星| 亚洲美女福利视频网站| 国产精品一区二区久久久| 欧美日韩精品中文字幕| 亚洲一区美女视频在线观看免费| 成人xvideos免费视频| 成人免费淫片视频软件| 亚洲男人av在线| 欧美午夜www高清视频| 亚洲日本中文字幕免费在线不卡| 69av在线视频| 日韩精品有码在线观看| 亚洲天天在线日亚洲洲精| 久久av中文字幕| 国产精品极品在线| 国产极品jizzhd欧美| 亚洲精品国产精品自产a区红杏吧| 国产精品爽爽爽爽爽爽在线观看| 91日韩在线播放| 欧美夫妻性生活视频| 亚洲精品久久久久久下一站| 中文字幕日韩免费视频| 自拍偷拍亚洲欧美| 亚洲国产99精品国自产| 久久影视电视剧凤归四时歌| 在线观看国产成人av片| 国产成人欧美在线观看| 亚洲精品456在线播放狼人| 国产精品亚洲网站| 久久国产精品久久久久久| 色偷偷88888欧美精品久久久| 人九九综合九九宗合| 精品久久久国产| 免费97视频在线精品国自产拍| 欧美激情一级二级| 91国产视频在线播放| 欧美午夜www高清视频| 亚洲视频欧洲视频| 亚洲精品720p| 日韩av免费在线看| 国产精品91一区| 亚洲自拍小视频免费观看| 国产精品jvid在线观看蜜臀| 波霸ol色综合久久| 国产精品久久久久久搜索| 久久精品中文字幕免费mv| 久久久精品一区二区三区| 伊人伊成久久人综合网站| 日韩av中文字幕在线免费观看| 日韩av在线一区| 久久激情视频久久| 亚洲免费福利视频| 久久久精品一区| 在线观看视频99| 日韩欧美国产一区二区| 日韩视频在线免费观看| 亚洲激情 国产| 亚洲成人黄色在线观看| 成人xxxxx| 国产做受高潮69| 亚洲精品久久久久久下一站| 久久久免费观看| 国产婷婷97碰碰久久人人蜜臀| 亚洲精品99999| 欧美在线视频导航| 精品成人乱色一区二区| 精品欧美aⅴ在线网站|