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

首頁 > 編程 > C# > 正文

c#中利用委托反射將DataTable轉換為實體集的代碼

2020-01-24 03:41:05
字體:
來源:轉載
供稿:網友
類泛型的約束:
復制代碼 代碼如下:
public static class ToModel<T> where T : class, new()

定義委托:
復制代碼 代碼如下:
public delegate void SetString(string value);

創建委托方法:
復制代碼 代碼如下:

private static SetString CreateStringDelegate(T model, string propertyName)
{
MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
Type type = typeof(SetString);
return Delegate.CreateDelegate(type, model, mi) as SetString;
}

利用反射和委托將DataTable轉換為實體集:
復制代碼 代碼如下:

public static IList<T> GetDelegate_ToModelList(DataTable dt)
{
IList<T> list = new List<T>();
if (dt == null || dt.Rows.Count < 1) return list;
SetString setDelegateString;
foreach (DataRow dr in dt.Rows)
{
T model = new T();
foreach (DataColumn dc in dt.Columns)
{
setDelegateString = CreateStringDelegate(model, dc.ColumnName);
setDelegateString(dr[dc.ColumnName].ToString());
}
list.Add(model);
}
return list;
}

這樣寫問題就來了,因為委托定義的參數時string類型的,因為我們實體中可能有int或者DateTime類型的,這時就需要用上泛型委托了
如果這樣定義委托:
復制代碼 代碼如下:
public delegate void SetString<PT>(PT value)

創建委托方法(這里有問題,不知如何處理):
復制代碼 代碼如下:

private static SetString CreateStringDelegate(T model, string propertyName)
{
MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
Type type = typeof(model).GetProperty(propertyName).PropertyType;
return Delegate.CreateDelegate(type, model, mi) as SetString<type>;
}

利用反射和委托將DataTable轉換為實體集:
復制代碼 代碼如下:

public static IList<T> GetDelegate_ToModelList(DataTable dt)
{
IList<T> list = new List<T>();
if (dt == null || dt.Rows.Count < 1) return list;
foreach (DataRow dr in dt.Rows)
{
T model = new T();
foreach (DataColumn dc in dt.Columns)
{
SetString<typeof(T).GetProperty(dc.ColumnName).PropertyType> setDelegateString = CreateStringDelegate(model, dc.ColumnName);
setDelegateString(dr[dc.ColumnName].ToString());
}
list.Add(model);
}
return list;
}

一直疑惑著,希望有人幫我解決疑惑,直接反射的方法我也有,但是這個問題不解決,心里一直有疙瘩,希望有人幫幫忙,謝謝
泛型可以動態構建的,你了解了這個,就能解決了,附上我的簡略代碼:
復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
namespace RftToModel {
class Program {
static void Main(string[] args) {
var result = ToModel<TestModel>.GetDelegate_ToModelList(BuildSampleTable());
foreach (var item in result) {
Console.WriteLine(item);
}
Console.Read();
}
static DataTable BuildSampleTable() {
DataTable result = new DataTable();
result.Columns.Add("ID", typeof(int));
result.Columns.Add("Name", typeof(string));
result.Columns.Add("IsDeleted", typeof(bool));
result.Rows.Add(new object[] { 1, "M.K", false });
result.Rows.Add(new object[] { 2, "B.G", true });
return result;
}
}
public class TestModel {
public int ID { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
public override string ToString() {
return string.Format("ID:{0} Name:{1} IsDeleted:{2}", ID, Name, IsDeleted);
}
}
public delegate void SetValue<T>(T value);
public static class ToModel<T> where T : class, new() {
private static Delegate CreateSetDelegate(T model, string propertyName) {
MethodInfo mi = model.GetType().GetProperty(propertyName).GetSetMethod();
//這里構造泛型委托類型
Type delType = typeof(SetValue<>).MakeGenericType(GetPropertyType(propertyName));
return Delegate.CreateDelegate(delType, model, mi);
}
private static Type GetPropertyType(string propertyName) {
return typeof(T).GetProperty(propertyName).PropertyType;
}
public static IList<T> GetDelegate_ToModelList(DataTable dt) {
IList<T> list = new List<T>();
if (dt == null || dt.Rows.Count < 1) return list;
Delegate setDelegate;
foreach (DataRow dr in dt.Rows) {
T model = new T();
foreach (DataColumn dc in dt.Columns) {
setDelegate = CreateSetDelegate(model, dc.ColumnName);
//這里改變類型
setDelegate.DynamicInvoke(Convert.ChangeType(dr[dc.ColumnName], GetPropertyType(dc.ColumnName)));
}
list.Add(model);
}
return list;
}
}
}

謝謝,我剛修改了,我傳進去SqlDataReader和DataTable都可以轉換了,當時只想著每次返回一個特定類型等委托都不知道如何下手,看著你的方法解決了
沒想到DynamicInvoke這個方法,算是學習了,你的代碼寫著層次好清晰,看了是一種享受,向你學習?。?
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
色悠久久久久综合先锋影音下载| 91夜夜揉人人捏人人添红杏| 久久久久久网站| 欧美电影免费播放| 国产中文字幕日韩| 亚洲欧美日韩中文在线制服| 国产视频精品自拍| 国产精品国产亚洲伊人久久| 亚洲精品国精品久久99热一| 国产精品成av人在线视午夜片| 色青青草原桃花久久综合| 日韩电影免费在线观看| 欧美一区二区大胆人体摄影专业网站| 久久久视频精品| 久久精品中文字幕| 欧美日韩国产精品一区二区三区四区| 日韩精品极品在线观看播放免费视频| 国产精品美女久久久免费| 亚洲福利视频在线| 国产日韩精品在线| 91av成人在线| 国产成人一区二区在线| 亚洲国产精品久久| 国产欧美日韩精品专区| 欧美大片第1页| 国产精品美女免费| 欧美久久精品午夜青青大伊人| 国内精品模特av私拍在线观看| 亚洲精品久久久久中文字幕欢迎你| 成人免费网站在线看| 欧美中文字幕精品| 国内精品久久久久| 亚洲国产精品99| 欧美中文字幕在线视频| 日本免费一区二区三区视频观看| 日韩av网址在线观看| 一本一本久久a久久精品综合小说| 日韩精品在线观看一区二区| 中文字幕久热精品在线视频| 欧美激情影音先锋| 日韩av免费在线看| 欧美日韩加勒比精品一区| 91免费观看网站| 国产精品久久久久久久久久久久久| 欧美大片在线影院| 亚洲国产精品久久91精品| 中文字幕9999| 日韩国产精品一区| 久久久久亚洲精品成人网小说| 国产视频欧美视频| 精品久久久久久久久久久久久久| 欧美极度另类性三渗透| 国产a∨精品一区二区三区不卡| 欧美日本黄视频| 欧美精品aaa| 粉嫩老牛aⅴ一区二区三区| 成人h视频在线观看播放| 欧美性精品220| 欧美性猛交xxxx免费看| 欧美另类极品videosbestfree| 久久久99久久精品女同性| 国产精品视频一区二区高潮| 国产精品男女猛烈高潮激情| 久久久精品国产亚洲| 成人性生交xxxxx网站| 国内成人精品一区| 欧美精品在线免费播放| 久久视频中文字幕| 日本欧美一二三区| 欧美日韩在线免费观看| 久久亚洲精品视频| 91精品久久久久久久久| 欧美成人免费视频| 欧美三级xxx| 亚洲国产小视频| 欧美人在线观看| 亚洲高清久久网| 按摩亚洲人久久| 国模极品一区二区三区| 日本久久亚洲电影| 国外成人在线视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 热re91久久精品国99热蜜臀| 亚洲成人网av| 亚洲va欧美va在线观看| 亚洲精品中文字幕女同| 81精品国产乱码久久久久久| 91精品91久久久久久| 九九热最新视频//这里只有精品| 欧美一级淫片videoshd| 一区二区三区动漫| 国产网站欧美日韩免费精品在线观看| 亚洲黄页视频免费观看| 亚洲国产精品久久久久久| 国产日韩在线播放| 久久久999成人| 欧美成人在线影院| 97视频色精品| 日韩欧美综合在线视频| 亚洲天天在线日亚洲洲精| 91tv亚洲精品香蕉国产一区7ujn| 欧美性猛交xxxxx水多| 成人免费高清完整版在线观看| 91精品视频免费观看| 九九视频直播综合网| 中文亚洲视频在线| 成人h猎奇视频网站| 久久久视频精品| 国产一区二区三区在线观看视频| 亚洲欧美激情视频| 国产美女久久久| 伦理中文字幕亚洲| 日韩电影大全免费观看2023年上| 欧美日韩亚洲视频一区| 欧美亚洲成人精品| 5566成人精品视频免费| 国产日韩在线精品av| 欧美激情一区二区三区高清视频| 2021久久精品国产99国产精品| 亚洲精选中文字幕| 26uuu另类亚洲欧美日本一| 国产做受高潮69| 亚洲国产精品va在线| 日韩在线视频导航| 97色在线观看免费视频| 免费91麻豆精品国产自产在线观看| 欧美精品在线极品| 一区二区三区在线播放欧美| 一区二区三区高清国产| 国产成人久久久| 国产v综合v亚洲欧美久久| 亚洲综合第一页| 国产精品一区二区女厕厕| 亚洲男人天堂手机在线| 亚洲一品av免费观看| 在线日韩中文字幕| www.欧美免费| 久久人人爽人人爽人人片亚洲| 欧美极品美女电影一区| 日本伊人精品一区二区三区介绍| 黑人极品videos精品欧美裸| 国产精品视频永久免费播放| 国外日韩电影在线观看| 91精品国产91久久久久福利| 久99九色视频在线观看| 色偷偷噜噜噜亚洲男人的天堂| 国产欧美久久一区二区| xvideos成人免费中文版| 国产日韩欧美成人| 欧美激情一级欧美精品| 成人在线国产精品| 精品久久中文字幕| 乱亲女秽乱长久久久| 久久精品这里热有精品| 国产精品久久激情| 欧美性xxxx| 成人久久一区二区| 欧美成人精品三级在线观看| 国产精品免费在线免费| 国产精品成人aaaaa网站| 日韩精品久久久久久福利| 成人xvideos免费视频| 亚洲人成电影网站| 丝袜亚洲另类欧美重口|