经常使用的一些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. go 0000

    1,函数不能比较 函数默认都是值传递,  除了  map   值, slice (切片)  channel  (管道)   interface 默认以这4个默认 引用传递 两个 defer      ...

  2. Linux 如何使用gdb 查看core堆栈信息

    转载:http://blog.csdn.net/mergerly/article/details/41994207 core dump 一般是在segmentation fault(段错误)的情况下产 ...

  3. DRF框架之 用户角色权限与访问频率的权限设置

    1. 简单演示,创建一个models的数据库表 class User(models.Model): name=models.CharField(max_length=32) pwd=models.Ch ...

  4. 二.第一个自动化demo,打开APP-如何获取包名和activity。(真机)

    环境配置成功后,我们就可以进行第一个自动化测试了.用真机则不需要安装安卓模拟器.以一个简单的打开APP为例. 一.获取包名和activtity      启动一个app,我们需要知道它的平台.版本号. ...

  5. React 获取服务器API接口数据:axios、fetchJsonp

    使用axios.fetchJsonp获取服务器的接口数据.其中fetchJsonp是跨域访问 一.使用axios 1.安装axios模块 npm install --save axios 2.引用模块 ...

  6. redis远程连接不上解决办法

    结构:PC-A 运行redis client,PC-B运行redis server PC-B方面 在server中,修改配置文件redis.windows-service.conf中的: 1.注释 # ...

  7. .NET大批量插入数据到Oracle

    跟一个第三方系统做接口,需要插入几百万条数据到Oracle数据库. 下载Oracle的Managed版本的ODP.NET组件,只需要一个Oracle.ManagedDataAccess.dll这个DL ...

  8. RabbitMQ安装及使用

    下载 由于RabbitMQ是基于Erlang语言开发,所以在安装RabbitMQ之前,需要先安装Erlang.好在RabbitMQ官网已经为我们提供了Erlang的安装包 Erlang下载地址:htt ...

  9. django项目 报错:ImportError: cannot import name choice

    今天项目开发中遇到一个错误,排查了很久才发现原因,现在分享出来,希望对大家有所帮助. 错误描述:在项目中添加了一个random.py的类,导入random中的choice,并在randstr方法中使用 ...

  10. Git安装配置,和使用的简介

    方案1:安装Git和TortoiseGit,使用TortoiseGit的图形化界面管理项目代码 材料准备: Git安装包 TortoiseGit安装包 注:包资源,可疑百度搜索,在Git官网下载 安装 ...