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. shell 字符菜单管理

    1.创建一个脚本func.sh 脚本如下func2.sh #!/bin/bash function menu(){ title="My Menu" url="www.la ...

  2. 201871010132--张潇潇--《面向对象程序设计(java)》第十五周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  3. csp 201809-2 买菜

    两人在一段时间买菜装车,装车时会聊天,求聊天的时长. 使用数组记录,求重叠部分即可 代码: #include<iostream> #include<string> #inclu ...

  4. Artificial Intelligence in Finance

    https://sigmoidal.io/real-applications-of-ai-in-finance/ Artificial Intelligence is taking the finan ...

  5. linux的cpu使用率

    linux 上一个核占满是 100%,双核机器占满整个 CPU 是 200%

  6. C++面向对象程序设计学习笔记(3)

    类与对象(1) 结构体与类 结构体的扩充 C++对结构体进行了扩充,它不仅可以含有不同类型的数据,还可以含有函数,结构体的函数可以像访问结构体中的数据一样进行访问. 类的声明 声明类的方法与声明结构体 ...

  7. jq form表单渲染单选框内容渲染

    单选框赋值 单选按钮赋值的主要就在于一个value值和name值对应,但是单选的选中状态按钮是input标签的check(选中)属性 当newattr的属性是1的时候为true,或者当newattr的 ...

  8. CF1194F Crossword Expert(数论,组合数学)

    不难的一题.不知道为什么能 $2500$…… 不过场上推错了一直不会优化…… 首先考虑 $f_i$ 表示恰好做完前 $i$ 道题的概率. 这样很难算.修改一下,$f_i$ 表示做完至少 $i$ 道题的 ...

  9. [LeetCode] 1123. Lowest Common Ancestor of Deepest Leaves 最深叶结点的最小公共父节点

    Given a rooted binary tree, return the lowest common ancestor of its deepest leaves. Recall that: Th ...

  10. [LeetCode] 881. Boats to Save People 渡人的船

    The i-th person has weight people[i], and each boat can carry a maximum weight of limit. Each boat c ...