经常使用的一些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. c语言中的利用函数实现交换两个字符,交换两个字符串

    c语言交换两个字符: 方法一:利用指针传址,效率比较高 void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b = temp } 方法二 ...

  2. Java反射实现原理分析

    目录: 一.反射的用法 二.反射实现原理 一.反射的用法 1.如何获取Class反射类 (1)通过getClass方法: Proxy proxy = new ProxyImpl(); Class pr ...

  3. webstorm没有及时将改动保存到文件盘的问题

    webpack经常监听不到webstorm的改动,即使手动ctrl+s了,导致无法触发编译,去google查了下,发现webstorm有一个“save write”的功能,见下图: 这选项的作用应该是 ...

  4. c# System.Console

    System.Console类公开了和操作控制台相关的有用的静态字段和静态方法.下面是System.Console中一些较为重要的方法. public static void Beep()该方法播放蜂 ...

  5. js一行代码解决各种IE兼容问题

    在网站开发中不免因为各种兼容问题苦恼,针对兼容问题,其实 IE给出了解决方案 Google也给出了解决方案 百度也应用了这种方案去解决IE的兼容问题 百度源代码如下 <!Doctype html ...

  6. Java8自定义函数式编程接口和便捷的引用类的构造器及方法

    什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterfa ...

  7. iframe父页面获取子页面元素方法

    1.window.frames["iframe的id"].contentDocument.getElementsByClassName("mycontainer" ...

  8. fiddler抓取https请求

    Fiddler抓取https设置详解(图文):https://www.cnblogs.com/joshua317/p/8670923.html Fiddler要抓取到https请求我们还需要Fiddl ...

  9. haproxy监控页面添加及参数简介(转)

    环境: [root@localhost 13:55:31 haproxy]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@loca ...

  10. 《Orange‘s》 Bochs环境配置

    安装配置bochs之前先写一个简单的引导扇区用来测试: org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $ DispStr: mov ...