首页 > 其他分享 >封装方法

封装方法

时间:2023-01-10 11:46:41浏览次数:52  
标签:封装 mapData item1 List var 方法 col string

DataTable 转换 List

点击查看代码
/// <summary>
/// Datatable类型转换list   author:zc
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="datatable"></param>
/// <param name="mapData">key 映射到 value, 如 {key: name, value: 'Name'}</param>
/// <returns></returns>
public static List<T> zcDatatableToList<T>(DataTable datatable, Dictionary<string, string> mapData)
{
    var type = typeof(T);
    var dataList = new List<T>();

    // 第一个item 是表字段,第二个可选,第二个是实体的属性
    var cols = new List<Tuple<string,string>>();
    for (var i = 0; i< datatable.Columns.Count; i++)
    {
        // 查找需要映射的值
        string item1 = datatable.Columns[i].ColumnName;
        string item2 = null;
        if (mapData != null && mapData.ContainsKey(item1))
            item2 = mapData[item1];
        cols.Add(new Tuple<string, string>(item1,item2));
    }
    foreach (DataRow row in datatable.Rows)
    {
        // 如果中有一行为空,则不往下走
        if (row.ItemArray.All(i=> string.IsNullOrWhiteSpace(i.ToString()) ))
            break;

        var data = Activator.CreateInstance<T>();
        // 是否往list添加
        var flagAdd = false;
        foreach (var col in cols)
        {
            var pro = string.IsNullOrWhiteSpace(col.Item2) ? col.Item1 : col.Item2;
            var proObj = type.GetProperty(pro,BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
            if (proObj == null)
                continue;
            proObj.SetValue(data, row[col.Item1]);
            flagAdd = true;
        }
        if(flagAdd)
            dataList.Add(data);
    }
    return dataList;
}

标签:封装,mapData,item1,List,var,方法,col,string
From: https://www.cnblogs.com/ProCheng/p/17039683.html

相关文章

  • 完全卸载MySQL服务的方法
    1.重新运行安装文件,单击remove移除mysql。此时安装目录中的文件没有完全移除,需要手动删除安装目录的Mysql文件夹。2.如果MySQL服务没有移除的话,以管理员方式运行cmd命令:sc......
  • request获取请求数据的方法
    1.获取所有参数map集合1map<String,String[]>getParameterMap()2.根据名称获取参数值(数组)1String[]fetParameterValues(Stringname)3.根据名称获取参数值(单......
  • LR性能测试常见问题及处理方法(一)
    (目录)1、错误码:Error-277271.1、错误记录Error-27727:Stepdownloadtimeout(120seconds)hasexpiredwhendownloadingresource(s).Setthe“ResourcePageT......
  • 表格封装
    <template><divv-if="showTable":style="cssVars"><a-table:columns="rowColumns":customRow="onClickRow":data-source="tableData"......
  • dotnet堆栈溢出通用排查方法
    常见方法1.查找对应代码中有无递归调用,如果有,检查其条件是否正确。2.排查内存溢出,检查应用程序中使用的资源,确保其资源使用量不超过操作系统的最大内存限制。3.检查......
  • 使用 sudo 命令时,重定向标准输出的两种方法
    错误的写法:sudocat>/etc/sysctl.d/bbr.conf<<EOFnet.core.default_qdisc=fqnet.ipv4.tcp_congestion_control=bbrEOF此写法看似很合理,但执行的时候会报Permissio......
  • Python网络爬虫get方法出现乱码的解决的三种方案
    给大家祭出网络爬虫过程中三种中文乱码的处理方案,希望对大家的学习有所帮助。方案一将requests.get().text改为requests.get().content我们可以看到通过text()方法获取......
  • 时间序列分析 Tsfresh 基于统计学的时间序列分析方法 2、移动平均模型
    原文链接:点这里移动平均模型(MovingAverage)移动平均模型(MA)依赖的基础是每个时刻点的值是历史数据点错误项的函数,其中这些错误项是互相独立的。MA模型和AR模型的公式很类......
  • 在线获取所有依赖rpm包的方法
    背景现在经常有一些不能上网的LInux机器但是需要安装一些软件.但是有时候经常因为有依赖关系找不到的情况比较麻烦.或者是一些公司的网络总是受限,网络速度非常慢.下......
  • VUE3 AXIOS 封装
    网上找了很多AXIOS的封装但是都不是很满意,后来参考其他人的实现做了改动后特分享出来http.ts文件封装importtype{AxiosRequestConfig,AxiosResponse}from'axios......