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. 去除数组空格 php

    public function trimArray($params){ if (!is_array($params)) return trim($params); return array_map([ ...

  2. Django 练习班级管理系统六 -- 编辑老师列表

    修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...

  3. adb 连接夜神和逍遥模拟器

    然后运行cmd命令,cd到夜神安装目录,执行命令 adb connect 127.0.0.1:62001 nox_adb.exe connect 127.0.0.1:62001 逍遥模拟器 adb c ...

  4. python关于SSL的认证--pycurl模块使用

    今天在做微信支付退款接口的时候,因为需要使用到双向证书的认证,所以一开始是没有头绪的,后来在网上找到了相类似的教程,发现了pycurl模块,才成功实现了证书认证,教程链接:http://blog.cs ...

  5. 17、DNS服务器

    DNS     domain  name system   域名系统   [root@li ~]# vim /etc/nsswitch.conf hosts:      files dns --涉及到 ...

  6. [Python]使用生成器来简化代码

    原本只是大概知道生成器是什么,但一直不知道怎么用,或是什么情景下用,后来才发现: 在需要一边读数据一边处理任务时,如果直接为每个任务都写一个函数,那么读数据的部分就要在每个函数都重复一遍 直接将所有任 ...

  7. SQLserver 《深入分析sqlserver 2008》

    PDF版本: 链接:https://pan.baidu.com/s/1bheII-EdyleVJaR5r9lT9Q 提取码:f8zz

  8. 18-numpy笔记-莫烦pandas-6-plot显示

    代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt data = pd.Series(np.random ...

  9. redhat 网卡绑定

    一.bonding技术 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量.实现网络冗余.负载等功能,有 ...

  10. python27期day04:列表、元组、range、作业题。

    1.for循环套for循环: for i in "abc": for x in "egf: print(x) 结果是:e g f e g f e g f  2.99乘法表 ...