有时候我们需要筛选显示数据集中的某些数据来进行个性化显示。比如从DataTable中挑出符合条件的某些数据来显示。以前的做法可能是写相应的sql语句对数据源进行查询,然后得到数据集再显示。这样做显然会增加服务器的负担,即使不考虑这一点,多一次的查询会使系统变慢,这一点还是比较明显的。所以我们在得到数据集(dataset,datatable)后,只需对其进行本地筛选就行,这样可以解决前面那种方法带来的问题。
下文几乎是完全复制MSDN的原文,辑录于此加深记忆。
排序和筛选数据 (ADO.NET)
DataView1 为在 DataTable2 中对数据排序和筛选提供了多种方法:
-
可以使用 Sort3 属性指定单个或多个列排序顺序并包含 ASC(升序)和 DESC(降序)参数。
-
可以使用 ApplyDefaultSort4 属性自动以升序创建基于表的一个或多个主键列的排序顺序。 只有当 Sort 属性为空引用或空字符串时以及表已定义主键时,ApplyDefaultSort4 才适用。
-
可以使用 RowFilter5 属性根据行的列值来指定行的子集。 有关 RowFilter 属性的有效表达式的详细信息,请参见 DataColumn6 类的 Expression7 属性的参考信息。
如果要返回对数据的特定查询的结果(而不是提供数据子集的动态视图),要实现最佳性能,请使用 DataView 的 Find8 或 FindRows9 方法,而不是设置 RowFilter 属性。 设置 RowFilter 属性会重新生成数据的索引,从而增加应用程序的系统开销并降低性能。 最好将 RowFilter 属性用于通过绑定控件显示筛选结果的数据绑定应用程序。 Find 和 FindRows 方法会利用当前的索引,而不需要重新生成索引。 有关 Find 和 FindRows 方法的更多信息,请参见查找行 (ADO.NET)10。
-
可以使用 RowStateFilter11 属性指定要查看的行版本。 DataView 根据基础行的 RowState 来隐式地管理要公开的行版本。 例如,如果 RowStateFilter 设置为 DataViewRowState.Deleted,由于不存在 Current 行版本,DataView 将公开所有 Deleted 行的 Original 行版本。 可以使用 DataRowView 的 RowVersion 属性来确定要公开行的哪个行版本。
下表显示了 DataViewRowState 选项。
DataViewRowState 选项
说明
CurrentRows
所有 Unchanged、Added 和 Modified 行的 Current 行版本。 这是默认设置。
Added
所有 Added 行的 Current 行版本。
Deleted
所有 Deleted 行的 Original 行版本。
ModifiedCurrent
所有 Modified 行的 Current 行版本。
ModifiedOriginal
所有 Modified 行的 Original 行版本。
None
没有行。
OriginalRows
所有 Unchanged、Modified 和 Deleted 行的 Original 行版本。
Unchanged
所有 Unchanged 行的 Current 行版本。
有关行状态和行版本的更多信息,请参见行状态与行版本12。
以下代码示例创建一个视图,该视图显示所有库存量小于或等于再订购量的产品,这些产品首先按供应商 ID 排序,然后按产品名称排序。
DataView prodView = new DataView(prodDS.Tables["Products"], "UnitsInStock <= ReorderLevel", "SupplierID, ProductName", DataViewRowState.CurrentRows);
使用 DataView 进行筛选 (LINQ to DataSet)
使用特定条件筛选数据,然后通过 UI 控件在客户端中表示该数据的能力是数据绑定的一个重要特征。 DataView 提供多种方式来筛选数据并返回满足指定筛选条件的数据行子集。 除了基于字符串的筛选功能以外,DataView 还为筛选条件提供了使用 LINQ 表达式的功能。LINQ 表达式允许执行比基于字符串的筛选更复杂而功能更强大的筛选操作。
使用 DataView 筛选数据有两种方式:
-
通过使用 Where 子句的 LINQ to DataSet 查询创建 DataView。
-
使用 DataView 现有的基于字符串的筛选功能。
详情见 http://msdn.microsoft.com/zh-cn/library/bb669073.aspx
转载于:https://blog.51cto.com/zhaojie/949300