zoukankan      html  css  js  c++  java
  • 泛型与datatable 转化

    背景:

    我们从数据库里读取出来的数据一般都是DataTable数据类型,但是操作这样的数据类型没有“泛型集合模型”数据类型方便

    更多的时候,我们要对集合数据进行处理,从中筛选数据或者排序。

    技能栈:泛型+反射

    转换帮助类代码:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;

    namespace AirTicketWinform
    {
    public class ModelConvertHelper<T> where T : new()
    {
    public static List<T> ConvertToModel(DataTable dt)
    {
    // 定义集合
    List<T> ts = new List<T>();

    // 获得此模型的类型
    Type type = typeof(T);
    string tempName = "";

    foreach (DataRow dr in dt.Rows)
    {
    T t = new T();
    // 获得此模型的公共属性
    PropertyInfo[] propertys = t.GetType().GetProperties();
    foreach (PropertyInfo pi in propertys)
    {
    tempName = pi.Name; // 检查DataTable是否包含此列

    if (dt.Columns.Contains(tempName))
    {
    // 判断此属性是否有Setter
    if (!pi.CanWrite) continue;

    object value = dr[tempName];
    if (value != DBNull.Value)
    pi.SetValue(t, value, null);
    }
    }
    ts.Add(t);
    }
    return ts;
    }
    }
    }
     

     调用转换代码:

    List<RegionModel> regionDataTable=null;
    /// <summary>
    /// 获取航线列表
    /// </summary>
    private void RegionDataTable()
    {
    string sql = "select id, name from Region";
    DataTable dt=DBHelper.GetDataTable(sql);

    //调用DataTable类型 转换成 List集合类型 帮助类
    regionDataTable= ModelConvertHelper<RegionModel>.ConvertToModel(dt);
    }
     

    参与资料:

    C# DataTable 和List之间相互转换的方法

    https://www.cnblogs.com/shiyh/p/7478241.html

    List与IList的区别

    http://www.cnblogs.com/wang7/archive/2012/05/16/2504634.html

     
    ————————————————
    版权声明:本文为CSDN博主「cplvfx」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/cplvfx/article/details/88927448

  • 相关阅读:
    ResGen.exe 生成resources文件方法 [转]
    C#【Winform】带参启动外部EXE
    SBO的5个开发原则机遇只给有准备的人[转]
    在SQL中插入临时表时使用自动增长的数据字段
    c# 强制退出
    C#实现SQL全库检索数据比较使用DataReader与DataAdapter+Datatable效率,差距惊人!
    推荐一个C#代码混淆器 .NET Reactor
    面向对象软件设计——设计模式学习
    AbstarctFactory模式——设计模式学习
    插入排序算法(直接,折半,希尔)
  • 原文地址:https://www.cnblogs.com/qiu18359243869/p/13040771.html
Copyright © 2011-2022 走看看