经常使用的一些datatable的操作,包括一些过滤去重的方法

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data; namespace TravcomRptTest.Common
{
public abstract class Dt
{
#region 按条件过滤DataTable
public static DataTable TblFilter(DataTable sourceTable, string condition)
{
var tempDt = sourceTable.Clone();
var rows = sourceTable.Select(condition);
foreach (var dr in rows)
{
tempDt.ImportRow(dr);
}
return tempDt;
} public static DataTable TblFilter(DataTable sourceTable, string condition, string[] columns)
{
var tempDt = new DataTable();
foreach (var t in columns)
{
tempDt.Columns.Add(t, typeof(String));
}
var rows = sourceTable.Select(condition);
foreach (var dr in rows)
{
var newDr = tempDt.NewRow();
foreach (var t in columns)
{
newDr[t.Split(':')[]] = dr[t.Split(':')[]].ToString();
}
tempDt.Rows.Add(newDr);
}
return tempDt;
}
#endregion
#region 按条件过滤DataTable,并排序
public static DataTable TblFilter(DataTable sourceTable, string condition, string orderBy)
{
var tempDt = sourceTable.Clone();
var rows = sourceTable.Select(condition, orderBy);
foreach (var dr in rows)
{
tempDt.ImportRow(dr);
}
return tempDt;
}
#endregion
#region 筛选不重复的sourceColumn数据,单Column
public static DataTable TblDistinct(DataTable sourceTable, string sourceColumn)
{
try
{
var result = sourceTable.Clone();
var ht = new Hashtable();
foreach (var dr in sourceTable.Rows.Cast<DataRow>().Where(dr => !ht.ContainsKey(dr[sourceColumn])))
{
ht.Add(dr[sourceColumn], null);
var newRow = result.NewRow();
newRow.ItemArray = dr.ItemArray;
result.Rows.Add(newRow);
}
return result;
}
catch (Exception)
{
return null;
}
}
#endregion
#region 筛选不重复的sourceColumn数据,单Column,指定数据类型
public static DataTable TblDistinct(DataTable sourceTable, string sourceColumn, Type columnType)
{
var result = sourceTable.Clone();
result.TableName = "DT";
result.Columns[sourceColumn].DataType = columnType;
try
{
var ht = new Hashtable();
foreach (var dr in sourceTable.Rows.Cast<DataRow>().Where(dr => !ht.ContainsKey(dr[sourceColumn])))
{
ht.Add(dr[sourceColumn], null);
var newRow = result.NewRow();
newRow.ItemArray = dr.ItemArray;
result.Rows.Add(newRow);
}
return result;
}
catch (Exception)
{
return null;
}
}
#endregion
#region 筛选不重复的sourceColumn数据,双Column
public static DataTable TblDistinct(DataTable sourceTable, string key1, string key2)
{
try
{
var result = sourceTable.Clone();
var ht = new Hashtable();
foreach (var dr in sourceTable.Rows.Cast<DataRow>().Where(dr => !ht.ContainsKey(dr[key1] + dr[key2].ToString())))
{
ht.Add(dr[key1] + dr[key2].ToString(), null);
var newRow = result.NewRow();
newRow.ItemArray = dr.ItemArray;
result.Rows.Add(newRow);
}
return result;
}
catch (Exception)
{
return null;
}
}
#endregion
#region 筛选不重复的sourceColumn数据,多Column
public static DataTable TblDistinct(DataTable sourceTable, string[] arrKey)
{
try
{
var result = sourceTable.Clone();
var ht = new Hashtable();
foreach (DataRow dr in sourceTable.Rows)
{
var strKey = arrKey.Aggregate(string.Empty, (current, t) => current + dr[t]);
if (ht.ContainsKey(strKey)) continue;
ht.Add(strKey, null);
var newRow = result.NewRow();
newRow.ItemArray = dr.ItemArray;
result.Rows.Add(newRow);
}
return result;
}
catch (Exception)
{
return null;
}
}
#endregion
#region 获取单一值
public static string GetSingle(string columnName, string condition, DataTable dt)
{
try
{
return TblFilter(dt, condition).Rows[][columnName].ToString();
}
catch
{
return string.Empty;
}
}
//获取单一值,为空返回默认值
public static string GetSingle(string columnName, string condition, DataTable dt, string defaultValue)
{
string strReturn;
try
{
strReturn = TblFilter(dt, condition).Rows[][columnName].ToString();
}
catch
{
strReturn = string.Empty;
}
if (strReturn.Trim() == "")
{
strReturn = defaultValue;
}
return strReturn;
}
#endregion
#region 获得一个带结构的DataTable
public static DataTable GetNewTbl(string tableName)
{
var dt = new DataTable();
switch (tableName)
{ case "ConfigModel":
#region
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("id", typeof(String));
dt.Columns.Add("MI01", typeof(String));
#endregion
break;
}
return dt;
}
#endregion //public static DataTable listToTable(List<Model.Segment> segList)
//{
// DataTable dt = new DataTable();
// dt.Columns.Add("psgqueue");
// dt.Columns.Add("airqueue");
// dt.Columns.Add("ticketno");
// for (int i = 0; i < segList.Count; i++)
// {
// DataRow dr = dt.NewRow();
// dr["psgqueue"] = segList[i].psgqueue;
// dr["airqueue"] = segList[i].airQueue;
// dr["ticketno"] = segList[i].ticketno;
// dt.Rows.Add(dr);
// } // return dt;
//} }
}

dt常用类的更多相关文章

  1. css样式清零及常用类

    css样式清零及常用类 @charset "utf-8"; /*CSS Reset*/ /*"微软雅黑","\5FAE\8F6F\96C5\9ED1& ...

  2. Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver

    ========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...

  3. JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  4. Java集合常用类特点整理

    集合的结构如下图所示: 集合的两个顶级接口分别为:Collection和Map Collection下有两个比较常用的接口分别是List(列表)和Set(集),其中List可以存储重复元素,元素是有序 ...

  5. Java集合框架(常用类) JCF

    Java集合框架(常用类) JCF 为了实现某一目的或功能而预先设计好一系列封装好的具有继承关系或实现关系类的接口: 集合的由来: 特点:元素类型可以不同,集合长度可变,空间不固定: 管理集合类和接口 ...

  6. java-API中的常用类,新特性之-泛型,高级For循环,可变参数

    API中的常用类 System类System类包含一些有用的类字段和方法.它不能被实例化.属性和方法都是静态的. out,标准输出,默认打印在控制台上.通过和PrintStream打印流中的方法组合构 ...

  7. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  8. iOS 杂笔-24(常用类到NSObject的继承列表)

    iOS 杂笔-24(常用类到NSObject的继承列表) NSString NSObject->NSString NSArray NSObject->NSArray ↑OC基本类都直接继承 ...

  9. java的eclipse操作和常用类Object的使用

    1.eclipse的快捷键: (1)alt + /   内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...

随机推荐

  1. Mysql将查询结果合并为一列

    利用函数:group_concat(),实现一个ID对应多个名称时,原本为多行数据,把名称合并成一行. 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order B ...

  2. centos7,zabbix3.2通过zabbix_java_gateway监控jmx[java/tomcat]

    网络上很多教程也比较多和全了,但是自己做时候多多少少的坑备注下吧. 1,监控原理简单说一下,就是zabbix_server通过代理(zabbix_java_gateway)来获取agent端(tomc ...

  3. 数据结构——串(KMP)

    空串:长度为0的串 空格串:由一个或多个空格组成的串 串常用的3种机内表示方法: 定长顺序存储表示: 用一组地址连续的存储单元存储串的字符序列,每一个串变量都有一个固定长度的存储区,可用定长数组来描述 ...

  4. docker 相关

    https://www.cnblogs.com/neptunemoon/p/6512121.html centos7 安装docker1.更新yum包yum update2.卸载旧版本(如果安装过旧版 ...

  5. Linux命令:dirs

    语法 dirs [-clpv] [+N | -N] 说明 打印目录栈内容. 不带任何参数,在一行里打印.空白分隔. /home/code/dir/crypto /home/code/a/b /home ...

  6. 排序大集合java

    今日面试被问到排序问题,发现自己的不足,特来查漏补缺: 首先是各大排序算法的总结表 排序算法大合集  排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 Ο(n2) Ο(n) ...

  7. OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)

    转自:http://www.cnblogs.com/zmkeil/archive/2013/04/17/3027385.html对于HG255D参照这里:http://www.right.com.cn ...

  8. Linux网络编程学习(七) ----- 有名管道(第四章)

    1.什么是有名管道?为什么有了管道还需要有名管道? 有名管道是解决管道不能提供非父子进程间通信的缺陷.管道在Linux系统内部是以文件节点(inode)的形式存在,但由于其对外的不可见性(“无名”性) ...

  9. Android上显示生僻字的方法

    安卓5.0+是可以显示所有(8万多个)Unicode汉字的,本文介绍显示生僻汉字的方法,这个方法也适用于其它特殊字符. Unicode值在0xFFFF以下的(2万多个简体.繁体)汉字早已被广泛支持,所 ...

  10. StreamReader和StreamWriter说明

    StreamReader/StreamWriter操作的是字符数据(char),而FileStream操作的是字节数据(byte) FileStream与StreamXXXX类的默认编码都是UTF8, ...