国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

利用.NET反射機制實現IList到DataTable轉換

2019-11-17 04:16:57
字體:
來源:轉載
供稿:網友

本文的意義并不僅僅是為了說明如何將IList轉換為DataTable,而是給出一個利用反射來實現對各種數據結構(集合類)相互轉換的通用方法的編寫思路。

相信很多使用過Nhibernate的朋友都知道,通過NH訪問數據庫,數據都是以ILIST形式返回的,這就為我們在.NET中使用傳統的數據綁定造成了不便。由于NH返回的ILIST所裝載的對象往往都是不同的,我們會為每個返回的LIST單獨編寫轉換方法,而利用反射機制卻可以做成通用的轉換方法。

代碼如下(C#):

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using System.Reflection;

namespace KycBaseModule
...{
    public class KycFunction
    ...{
        public KycFunction() ...{ }
        /**//// <summary>
        /// 實現對IList到DataSet的轉換
        /// </summary>
        /// <param name="ResList">待轉換的IList</param>
        /// <returns>轉換后的DataSet</returns>
        public static DataSet ListToDataSet(IList ResList)
        ...{
            DataSet RDS=new DataSet();
            DataTable TempDT = new DataTable();

            //此處遍歷IList的結構并建立同樣的DataTable
            System.Reflection.PRopertyInfo[] p = ResList[0].GetType().GetProperties();
            foreach (System.Reflection.PropertyInfo pi in p)
            ...{
                TempDT.Columns.Add(pi.Name,System.Type.GetType(pi.PropertyType.ToString()));
            }

            for (int i = 0; i < ResList.Count; i++)
            ...{
                IList TempList = new ArrayList();
                //將IList中的一條記錄寫入ArrayList
                foreach (System.Reflection.PropertyInfo pi in p)
                ...{
                    object oo = pi.GetValue(ResList[i], null);
                    TempList.Add(oo);
                }
               
                object[] itm=new object[p.Length];
                //遍歷ArrayList向object[]里放數據
                for (int j = 0; j < TempList.Count; j++)
                ...{
                    itm.SetValue(TempList[j], j);
                }
                //將object[]的內容放入DataTable
                    TempDT.LoadDataRow(itm, true);
            }
            //將DateTable放入DataSet
            RDS.Tables.Add(TempDT);
            //返回DataSet
            return RDS;
        }
    }
}

由上面的代碼可以看出,實現的過程非常簡單。首先利用反射,將傳入方法的IList中的對象所包含的屬性進行獲取,然后根據獲取的屬性建立DataTable的Columns,然后利用循環遍歷整個IList,將每個結點對象所包含的內容依次復制到DataTable。由于該代碼取自真實的項目模塊,所以保留了原有的命名空間和將DataTable放入Dataset的幾行。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 修文县| 九台市| 封丘县| 庆城县| 闽清县| 珠海市| 罗田县| 鄂伦春自治旗| 石河子市| 蓬溪县| 庆城县| 浙江省| 西华县| 隆子县| 抚州市| 铜陵市| 武宣县| 永胜县| 白银市| 丰台区| 百色市| 贡嘎县| 丹凤县| 开鲁县| 东兰县| 顺昌县| 睢宁县| 久治县| 开远市| 威远县| 繁峙县| 上饶县| 利辛县| 云梦县| 五峰| 上蔡县| 洛扎县| 苏尼特右旗| 阿巴嘎旗| 西充县| 大荔县|