ADO.NET 为我们提供了一些查询内存中数据表的API,利用这些API我们可以对内存中的DataTable进行类似于查询数据库查询的操作。
1.查询数据并对其进行排序
当我们想要访问DataTable中特定的行时,可以根据这个表的一列或者多列作为搜索条件来访问这些数据行。
1.1 按照主键查找数据行
和数据库中的表类似,每个DataTable都包括一个可选的主键定义,也就是一组被指定给该表PrimaryKey成员的DataColumn对象。主键可以是来自某一列的唯一值或者是多列组成的键,根据主键找到某一行可以使用 Rows.Find() 方法:
1 DataRow result = someTable.Rows.Find(usePrimaryKey);
1.2 使用搜索条件筛选行
使用主键进行搜索可以快速的找到对应的单行数据,但是如果想要搜索多列符合条件的数据行时,我们可以使用DataTable类的Select()方法,只需要向该方法传递一个包含搜索条件的字符串:
1 DataRow[] resultRows = someTable.Select(filterCriteria);
搜索条件的字符串类似于T-SQL构建的一个布尔语句,如果想查看筛选表达式的完整说明,可以参考MSDN:DataColumn.Expression 属性。
1.3 对搜索结果进行排序
默认的情况下,DataTable.Select 方法返回的DataRow对象的顺序就是这些对象被添加进表中的顺序。我们可以像SQL语句那样在查询条件中添加命令来表示排序规则:
1 DataRow[] resultRows = someTable.Select(filterCriteria,sortRules);
1.4 查询时区分大小写
默认情况下,DataTable.Select 方法是不区分大小写的,如果需要对筛选条件进行大小写区分,可以设置表的CaseSensitive属性即可:
1 someTable.CaseSensitive = true;
2.使用表达式列
DataTable同时也支持一个非常重要的功能:表达式列,就是可以根据其他行列中的数据来现实计算结果的字段。类似于T-SQL中提供的函数,我们可以根据现有行列的数据来计算出需要值。
向DataTable中添加表达式列,可以创建一个标准的DataColumn对象,填充ColumnName和DataType属性,然后指定一个字符串表达式,对Expression属性执行自定义计算:
1 DataColumn orderTotal = new System.Data.DataColumn(); 2 orderTotal.ColumnName = "Total"; 3 orderTotal.DataType = typeof(decimal); 4 orderTotal.Expression = "subtotal + ISNULL(TAX,0)"; 5 someTable.Columns.Add(orderTotal);
猛击下载:示例程序