1、DataTable 转 泛型T的List

        /// <summary>
/// 数据集DataTable转换成List集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dtTemp"></param>
/// <returns></returns>
public static List<T> ToListByDataTable<T>(DataTable dtTemp)
{
if (dtTemp == null || dtTemp.Rows.Count == )
{
return null;
}
List<T> lstResult = new List<T>(); for (int j = , l = dtTemp.Rows.Count; j < l; j++)
{
T _t = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] propertys = _t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
for (int i = , k = dtTemp.Columns.Count; i < k; i++)
{
// 属性与字段名称一致的进行赋值
if (pi.Name.ToLower().Equals(dtTemp.Columns[i].ColumnName.ToLower()))
{
if (dtTemp.Rows[j][i] != DBNull.Value)
{
switch (pi.PropertyType.ToString())
{
case "System.Int32":
pi.SetValue(_t, Nall.ToInt(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.Int64":
pi.SetValue(_t, Nall.ToLong(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.DateTime":
pi.SetValue(_t, Nall.ToDateTime(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.String":
pi.SetValue(_t, dtTemp.Rows[j][i].ToString(), null);
break;
case "System.Boolean":
pi.SetValue(_t, Nall.ToBoolean(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.Guid":
pi.SetValue(_t, Nall.ToGuid(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.Single":
pi.SetValue(_t, Convert.ToSingle(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.Double":
pi.SetValue(_t, Convert.ToDouble(dtTemp.Rows[j][i].ToString()), null);
break;
case "System.Object":
pi.SetValue(_t, dtTemp.Rows[j][i], null);
break;
}
}
else
{
switch (pi.PropertyType.ToString())
{
case "System.Int32":
pi.SetValue(_t, -, null);
break;
case "System.Int64":
pi.SetValue(_t, -, null);
break;
case "System.DateTime":
pi.SetValue(_t, new DateTime(0x76c, , ), null);
break;
case "System.Boolean":
pi.SetValue(_t, false, null);
break;
case "System.Guid":
pi.SetValue(_t, Guid.Empty, null);
break;
case "System.Single":
pi.SetValue(_t, 0.0f, null);
break;
case "System.Double":
pi.SetValue(_t, 0.0, null);
break;
case "System.String":
pi.SetValue(_t, string.Empty, null);
break;
default:
pi.SetValue(_t, null, null);
break;
}
}
break;
}
}
}
lstResult.Add(_t);
}
return lstResult;
}

2、DataTable 转 HashTable

        /// <summary>
/// DataTable转HashTable
/// </summary>
/// <param name="dt"></param>
/// <param name="key"></param>
/// <returns></returns>
public static Hashtable ToHashtableByDataRow(DataTable dt, int key)
{
Hashtable ht = new Hashtable();
for (int i = ; i < dt.Columns.Count; i++)
{
ht.Add(dt.Columns[i].ColumnName, dt.Rows[key][i]);
}
return ht;
}

3、DataTable 转 HashTable

        /// <summary>
/// 转换哈希表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static List<Hashtable> ToHashtableByDataTable<T>(DataTable dt)
{
List<Hashtable> listht = new List<Hashtable>();
for (int i = ; i < dt.Rows.Count; i++)
{
Hashtable ht = new Hashtable();
ht.Add(i, dt.Rows[i]);
listht.Add(ht);
}
return listht;
}

4、DataTable 按照某列进行条件拆分

        /// <summary>
/// 拆分Dt,返回相同数据结构的多个Dt
/// [Excel需要去掉第一行标题]
/// </summary>
/// <param name="dt">原始数据Dt</param>
/// <param name="condition">第几列数据,按照这一列进行拆分</param>
/// <param name="orderstr">排序条件,DataView的排序条件</param>
/// <returns></returns>
public static List<DataTable> SplitDtSameStruct(DataTable dt,int columnnum,string orderstr) {
//定义返回对象
List<DataTable> listDt = new List<DataTable>();
//按照条件进行筛选
List<string> conditionstr = new List<string>();
foreach (DataRow dr in dt.Rows)
{
//筛选字段的值
string key = dr["Column"+ columnnum].ToString();
//不存在新增进条件conditionstr中
if (!isExit(conditionstr,key)) {
conditionstr.Add(key);
}
}
//根据条件conditionstr集合进行拆分dt
//1、将dt数据源按照字段排序
dt.Columns.Add();
DataView view = new DataView(dt);
//正序排列
view.Sort = orderstr;//"Column"+ columnnum + " ASC";
dt = view.ToTable();
foreach (string str in conditionstr)
{
//按照条件进行抽取数据
DataRow[] dr = dt.Select("Column"+ columnnum + "='"+str+"'");
//抽出的数据存入临时的tempdt中
DataTable tempdt = new DataTable();
tempdt = dt.Clone();//拷贝框架
for (int i = ; i < dr.Length; i++)
{
tempdt.ImportRow((DataRow)dr[i]);
}
//tempdt存入返回对象listDt中
listDt.Add(tempdt);
}
return listDt;
}

日常工作常遇到的utils中积累的代码,可以优化的地方希望多多指教!

C# 常用工具方法之DataTable(一)的更多相关文章

  1. jQuery常用工具方法

    前面的话 jQuery提供一些与元素无关的工具方法,不必选中元素,就可以直接使用这些方法.如果理解原生javascript的继承原理,那么就能理解工具方法的实质.它是定义在jQuery构造函数上的方法 ...

  2. JavaScript常用工具方法

    JavaScript常用工具方法 1.日期格式化 2.将日期字符串转换为Date,字符串格式为(yyyy-mm-dd hh:mm:ss) 3.JS获取当天00:00:00时间和23:59:59的时间 ...

  3. JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数

    在JavaScript中是不区分整数值和浮点数值的,其中所有的数字均用浮点数值表示.JavaScript采用IEEE 754标准(有兴趣可以浏览网络规范分类下的IEEE 754标准,需要原文件请在留言 ...

  4. C# 枚举常用工具方法

    /// <summary> /// 获取枚举成员描述信息及名称 /// 返回:IDictionary /// Value:描述信息 /// Key:值 /// </summary&g ...

  5. Asp.net常用开发方法之DataTable/DataReader转Json格式代码

    public static string JsonParse(OleDbDataReader dataReader) //DataRead转json { StringBuilder jsonStrin ...

  6. java常用工具方法2

    /* * Copyright 2005 Joe Walker * * Licensed under the Apache License, Version 2.0 (the "License ...

  7. JavaScript常用工具方法封装

    因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断 isString (o) { //是否字符串 return Object.prototype. ...

  8. jquery 常用工具方法

    inArray(value, array [, fromIndex ])方法类似于原生javascript的indexOf()方法,没有找到匹配元素时它返回-1.如果数组第一个元素匹配参数,那么$.i ...

  9. Spring常用工具方法备忘录

    1:加载配置文件 Resource resource = new ClassPathResource("log4j.properties"); Properties default ...

随机推荐

  1. MYSQL练习随笔

    解法练习 案例1.子查询练习 字段 说明film_id 电影idtitle 电影名称description 电影描述信息category_id 电影分类idname 电影分类名称last_update ...

  2. JAVA中为什么要配置环境变量?怎么配置环境变量?

    1.为什么要配置环境变量? 答:为了让javac命令(编译命令)和Java命令(运行命令)能在任何文件夹都能运行. 2.怎么配置环境变量? JAVA_HOME : D:\develop\Java\jd ...

  3. lf 前后端分离 (4) 价格策略

    一.价格策略 价格策略就是通过前端发送要购买的课程以及价格策略来找出表关联的字段返回客户端 通过contenttype 属性 找到课程所有的价格策略 for prcie_policy in cours ...

  4. Vuex操作步骤

    概念流程图: 案例: (1)src/store/index.js导出仓库 (2)在入口文件引入仓库并派发到每个组件,在入口文件main.js引入,挂载到根组件上,方便以后使用this.$store调用 ...

  5. 201871010128-杨丽霞《面向对象程序设计(java)》第十三周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. day31_8.12并发编程二线程

    一.进程间的通信 在进程中,可以通过Queue队列进行通信,队列有两个特点: 1.先进先出.(先来的数据先被取出) 2.管道式存取.(数据取出一次后就不会在有了) 在python中有以下方法来操作数据 ...

  7. day21_7.25 面向对象之继承

    一.继承 什么是继承? 继承是一种关系,就是描述两者之间什么是什么的关系. 在程序中,继承描述的是类与类之间的关系. 例如a如果继承了b,a就具备了b的所有变量与方法,可以直接调用. class B: ...

  8. eclipse集成maven(四)

    一.配置maven 打开Window-Preference-Maven,我们可以看到,默认是使用Eclipse的,不是我们要的maven,可以在Installations中,点击"Add&q ...

  9. Django之创建项目、目录层级、基本操作

    创建项目 在合适的位置创建一个目录 打开cmd窗口,进入到创建的目录内 输入django-admin startproject project 目录层级 manage.py 是一个命令行工具,可以使我 ...

  10. JDOJ 2225 工资计划

    JDOJ 2225: 工资计划 https://neooj.com/oldoj/problem.php?id=2225 Description 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零 ...