经常使用的一些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. [UNITY 5.4 UGUI] 模态对话框

    1.建立两个画布 a.背景界面 b.置顶界面(添加一个 panel 控件) 2.修改置顶界面中 panel ,添加属性 [Canvas Group] 3.根据界面设计情况修改透明度,色彩,图片

  2. Delphi ClientDataSet 主从结构 BUG

    使用ADO控件 .ClientDataSet .增加了从表与主表的关连字段 SheetID,别的设置全为默认.如图1所示 图1 ======= 问题 BUG: 打开主表与从表,先不对主表进行任何操作. ...

  3. Verilog笔记——Verilog数字系统设计(第二版)夏宇闻

    本片记录Verilog学习笔记,主要是和以往用的C语言的不同之处,以例子.代码的形式记录.学习以<Verilog数字系统设计>(第二版)为参考资料,援助作者夏宇闻. 1. C语言和Veri ...

  4. docker 独立搭建linux + php 随笔

    参考了 https://www.jianshu.com/p/fcd0e542a6b2  dodos大佬的一些经验 1.首先,由于nginx跟php的特性,使得二者可以单独作为独立容器存在,所以为了使h ...

  5. Idea安装lombok插件【转载】

    参照:http://www.cnblogs.com/holten/p/5729226.html https://yq.aliyun.com/articles/59972 lombok是一个可以通过简单 ...

  6. MySQL Tips

    MySQL中的一些Tips,个人总结或者整理自网络 不明白为什么MySQL的很多材料中总是喜欢把联合(复合)索引和覆盖索引放在一块说事? 1,联合索引是一种索引的类型,指创建索引的时候包含了多个字段. ...

  7. 【转】如何使用离线博客发布工具发布CSDN的博客文章

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  8. Homework:小写字母转大写字母

    // 功能: // 从键盘上输入单个字符 // 如果是小写字母,则转换成大写后输出 // 否则,什么也不做,原样输出 #include <stdio.h> int main() { cha ...

  9. LinkedList使用方法

    特有功能 void addFirst(E e);//在索引为0的位置添加指定元素 void addLast(E e);//在索引为size()-1的位置添加指定元素 E getFirst() 获取索引 ...

  10. .netframe初识

    转发自:https://blog.csdn.net/bingshan5haoao/article/details/32966581 https://www.cnblogs.com/liuxx/p/35 ...