Datatable的查找和排序(Datatable.Select)

时间:2023-03-09 19:03:46
Datatable的查找和排序(Datatable.Select)

Datatable  是一种常用的数据结构。数据类型有点类似于数据库中的表结构。在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object。

鉴于Datatable在数据结构中的地位,ms 提供了丰富的属性和方法来操作Datatable(以前曾经专门打印过Datatable的文档,相关内容确实非常的多),此处专门记录下Datatable 如何进行排序和查找的。

ms提供了 Datatable.Select 的四种重载,基本解决了这个问题(.Net 3.5之后的 linq 也很优雅的解决了这个问题)

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)——获取与排序顺序中的筛选器以及指定的状态相匹配的所有 System.Data.DataRow 对象的数组。

说明:

(1)Datatable.Select() ;   会获取到一个DataRow 的数组

(2)Datatable.Select(string ); string内容是一个表达式,相当于sql 中where 后边的语句,但是有些表达式无法使用,比如between

(3)Datatable.Select(string , string );第一个string 为表达式,用法同(2),第二个表示式是用来表示排序字符的 类似于 order by 后边的内容  如:

DataRow[] mDrs = dtGeographyAccount.Select(
                    string.Format("IsStockDay = 1 AND GeographyName like '%{0}%'", region),
                    "Date Asc");

(4)Select(string , string , DataViewRowState );    前两个string 不解释,第三个是枚举类型,因为Datatable中的行都是有状态的,此处可以对不同的状态进行筛选

另外 Datatable中对于列明是不敏感大小写的,如果需要区分大小写,需要将DataTable的caseSensitive属性设为true。