zoukankan      html  css  js  c++  java
  • dt常用类

    经常使用的一些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(':')[0]] = dr[t.Split(':')[0]].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[0][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[0][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;
            //}
    
        }
    }
                    
  • 相关阅读:
    好用的javascript eclipse插件Aptana
    汉字字符串转换成十六进制byte数组,一个汉字存到两个byte里面,大整数存到两个byte里面
    三星 平板手机电脑 Galaxytab2忘记开机密码解决方法
    java float 加减精度问题
    android 增加Addon属性支持的方法
    基于jquery的kendoUI 可以实现快速开发,节省大量web UI开发工作量
    zdz工具箱v1.5 android版本发布了,集成各种个人生活中常用的工具,方便日常使用管理
    存储联系人信息(进程com.motorola.contacts)意外停止 事件提醒eventreminder异常 处理方法
    playframework 同时运行多个项目的方法修改默认端口号
    免费的Git私有代码托管服务
  • 原文地址:https://www.cnblogs.com/Lvkang/p/10750254.html
Copyright © 2011-2022 走看看