zoukankan      html  css  js  c++  java
  • 筛选DataTable中数据的方法

      当你从数据库里取出一些数据,然后要对数据进行整合,你很容易就会想到:

    1 DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T1"查询出来的结果 
    2 for (int i = 0; i < dt.Rows.Count; i++) 
    3 { 
    4 if (dt.Rows[i]["C1"].ToString() == "abc")//查询条件 
    5 { 
    6 //进行操作 
    7 } 
    8 }
    View Code

      但这种做法用一两次还好说,用多了就累了。那有没有更好的方法呢?记得LinQ是可以直接对DataTable进行查询操作的,那在.Net Framework 2.0里,有没有类似的方法呢?答案是肯定的,就是dt.Select(),上面的操作可以改成这样:

    1 DataRow[] drArr = dt.Select("C1=’abc’");//查询
    2 //还可以这样操作:
    3 
    4 DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询 
    5 DataRow[] drArr = dt.Select("’abc’ LIKE C1 + ’%’", "C2 DESC");//另一种模糊查询的方法 
    6 DataRow[] drArr = dt.Select("C1=’abc’", "C2 DESC");//排序
    View Code

      问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到:

    1 DataTable dtNew = dt.Clone(); 
    2 for (int i = 0; i < drArr.Length; i++) 
    3 { 
    4 dtNew.Rows.Add(drArr[i]); 
    5 }
    View Code

      但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:

    1 DataTable dtNew = dt.Clone(); 
    2 for (int i = 0; i < drArr.Length; i++) 
    3 { 
    4     dtNew.ImportRow(drArr[i]);
    5 
    6 }
    View Code

      补充一下,还可以利用DataView来达到检索的目的。 

     1 DataTable dataSource = new DataTable(); 
     2 DataView dv = dataSource.DefaultView; 
     3 dv.RowFilter = "columnA = 'abc'";
     4 
     5 //1.过滤后直接获取DataTable 
     6 DataTable newTable1 = dv.ToTable();
     7 
     8 //2.设置新DataTable的TableName 
     9 DataTable newTable2 = dv.ToTable("NewTableName");
    10 
    11 //3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序 
    12 //即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。 
    13 DataTable newTable3 = 
    14 dv.ToTable(true, new string[] { "columnA,columnF,columnC" });
    15 
    16 //4.综合了2.3两点。 
    17 DataTable newTable4 = 
    18 dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });
    View Code
  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/gldblogs/p/4221647.html
Copyright © 2011-2022 走看看