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中积累的代码,可以优化的地方希望多多指教!

最新文章

  1. 【leetcode】Unique Binary Search Trees (#96)
  2. winform 获取当前程序运行根目录
  3. Terminal中输入命令直接打开QtCreator,以及创建其桌面快捷方式
  4. 网络子系统55_ip协议分片重组_加入ipq
  5. windows phone 扫描二维码
  6. System.Net.Http 简介
  7. C++第一天学习
  8. WPScan初体验
  9. 说说VNode节点(Vue.js实现)
  10. 数据库中字段类型对应的C#中的数据类型(转载)
  11. c++入门之初话结构体
  12. P1115 最大子段和
  13. day059 ajax初识 登录认证练习
  14. C# DataGridView搜索
  15. Linux系统中的文件权限
  16. c++学习笔记(二)-指针
  17. doubleclick protobuf file load to project
  18. WPF使用DataGridComboBoxColumn完成绑定
  19. CF1067D Computer Game
  20. 对比jQuery和AngularJS的不同思维模式

热门文章

  1. Fundebug录屏插件更新至0.5.0,新增domain参数
  2. 【IDE_IntelliJ IDEA】idea主题设置
  3. Django Windows+IIS+wfastcgi 环境下部署
  4. Linux---进程控制类命令
  5. Appium基础:appium相关API
  6. opencv旋转图像,90度标准旋转
  7. 树莓派autossh反向隧道
  8. 11/7 &lt;Dynamic Programming&gt;
  9. django -- admin里的配置
  10. Asp.Net Core 中的环境变量