首页 > 编程语言 >C# DataTable.Select() 筛选数据

C# DataTable.Select() 筛选数据

时间:2022-10-24 15:55:14浏览次数:58  
标签:filterExpression string C# dtUsers DataRow 筛选 DataTable Select

https://blog.csdn.net/qq_26640897/article/details/81161883

有时候我们需要对数据表进行筛选,微软为我们封装了一个公共方法, DataTable.Select(),其用法如下:

Select()

Select(string filterExpression)

Select(string filterExpression, string sort)

Select(string filterExpression,string sort, DataViewRowState record States)

1)  Select()——获取所有 System.Data.DataRow 对象的数组;

2)  Select(string filterExpression)——按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 System.Data.DataRow 对象的数组;

3)  Select(string filterExpression, string sort)——获取按照指定的排序顺序且与筛选条件相匹配的所有System.Data.DataRow 对象的数组;

4)  Select(string filterExpression, string sort, DataViewRowState recordStates)——获取与排序顺序中的筛选器以及指定的状态相匹配的所有。

 

举例说明:

有一个用户表,名称为 dtUsers,有id、姓名name、性别sex、年龄age

1.筛选所有的用户  

         DataRow[] drs1 =dtUsers.Select();

2.筛选所有性别为男的用户

         DataRow[] drs2 =dtUsers.Select("sex = '男' ");

3.筛选所有性别为男且年龄在18岁以上的用户

         DataRow[] drs3 =dtUsers.Select("sex = '男' and age >= 18");

4.筛选所有性别为男或者年龄在18岁以上的用户

         DataRow[] drs4 =dtUsers.Select("sex = '男' or age >= 18");

5.筛选所有姓“夏”的用户

         DataRow[] drs5 =dtUsers.Select("name like '夏%'");

6.筛选所有18岁以上的用户且按从大到小的顺序排序

         DataRow[] drs5 =dtUsers.Select("age >=18","age desc");

7.上面最后一种用法没试过,有机会再列举出来。


注意事项

1.上面的Select操作是不区分大小写的(表字段不敏感,如pl-sql语法),如果需要区分大小写,需要将DataTable的caseSensitive属性设为true,例如上表的

dtUsers.CaseSensitive = true;//区分大小写

2.今天做开发发现一个问题,那边是对空白符的筛选无效,即dt.Select("colnume = '' ");经过调试后发现是因为我的数据源是从数据库中查询的,如下(表名dtOriginal):

我在对PRODUCTUNIT列进行筛选的时候,第一行的“制作一部”筛选出了结果,而后面4行并没有,因为是数据类型的问题——

解决办法有两种,一种是把所有的空白单元格替换成空格字符 ‘’,一种是在数据库查询的时候用decode()函数进行替换,例如SELECT DECODE(列名,NULL,'','列本身') FROM 表名(用replace函数在数据库中替换NULL是无效的)。

标签:filterExpression,string,C#,dtUsers,DataRow,筛选,DataTable,Select
From: https://www.cnblogs.com/Dongmy/p/16821724.html

相关文章

  • FusionCompute安装
    安装CNA和VRM(CNA和VRM)安装步骤一致,只是IP不同创建虚拟机开始安装打开网页打开浏览器输入http://IP:8443进入VRM管理登录界面用......
  • Codeforces Round #450 (Div. 2) 题解
    A#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#define#define#define#define#define#define#define#define#define#define#de......
  • CF 894E(Ralph and Mushrooms-Tarjen)
    给一个有向图,每条边有边权w,第k次经过一条边获得max(0,w−1−2−..−(k−1)),问最大获得权值。显然一个点强联通分量里的点可以一次取走,对原图缩点,跑DAG.#include<iostre......
  • NWERC 2017(Connect the Dots-几何+搜索)
    题意:4*4个格点,要求一笔从小到大依次经过这16个点。求使用的最小线段数。暴搜。考虑任意一条线段一定满足1.斜率为2个不超过20的整数的比值;2.至少经过1个点。搜索状态......
  • POJ 1825/2279(Young/Mr. Young's Picture Permutations-杨氏矩阵和钩子公式)
    给出一个n行的矩阵,每一行有a[i]个数,总共有sum个数,要求每一个位置的数必须比上面的数和左面的数大,求总方案数.杨氏矩阵又叫杨氏图表,它是这样一个矩阵,满足条件:(1)如果格子......
  • CF 869E(The Untended Antiquity-Hash值维护连通性)
    一个地图,然后三种操作1.一个矩阵四周加上障碍(不与任何障碍相交)2.一个矩阵四周的障碍消除3.问你两个点之间是否纯在一条路径不经过障碍矩阵大小2500^2,操作10w树状......
  • NWERC 2013
    BBattleforSilver容易发现答案最多有4个点,枚举所有4个点一下的完全图。#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#defi......
  • Codeforces Round #438 by Sberbank and Barcelona Bootcamp (Div. 1 + Div. 2 combin
    A.BarktoUnlock#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#define#define#define#define#define#define#define#define#......
  • CODE FESTIVAL 2017 qual A
    ASnuke’sfavoriteYAKINIKU#include<bits/stdc++.h>usingnamespacestd;#define#define#define#define#define#define#define#define#define#define#define#define#def......
  • ASC 16
    ACactus给一棵树,可以连边(不能连重边),问连出仙人掌的方案数。把模型转化为,给树染色,要求相同颜色的形成一条长度大于1的链或单点,树形dp#include<bits/stdc++.h>usingnamesp......