ADO.NET 快速入門(十):過濾資料

rose_and_sun發表於2017-04-26
我們有很多方法來過濾資料。一種是在資料庫命令級別,利用 where 子句查詢過濾資料。另一種是在資料填充到 DataSet 以後過濾資料。本篇討論後者。
 
一旦資料填充到 DataSet,你可以使用 DataSet 的方法獲取一個資料子集。
 

1、使用 Select 方法過濾

設想一下 DataSet 填充了 Customers 和 Orders 兩個表。你可以使用 Select  方法返回一組行,為名叫 Kelly 的 Customers 過濾資料。

 
    myRowArray = dsCustomers.Select("ContactName like 'Kelly%'");

 

注意,這個語句和 ANSI-SQL 類似。從本質上講,他們是 ANSI-SQL 的子集,下列區別:因為 DataSet 可以儲存多張關聯表,所以過濾器也可以過濾這些關聯表。下例中,使用 Child 關鍵字過濾 Orders 和 Customers。

 
    myRowArray = dsCustomers.Select("ContactName like 'Kelly%' AND [child].OrderDate = '7/26/68'");

 

Select 函式返回行陣列,你可以通過 foreach 語句迭代這個陣列。

 

2、使用 DataViews 過濾和排序

 
使用 DataView 物件,你可以在 DataSet 上設定多個過濾器,建立對他們的繫結,等等。DataView 可以使用 Select 中同樣的查詢語法規則過濾資料。但是過濾器是動態的。如果新增一行資料,並且滿足過濾要求,那麼對 View 可見。Views 可以排序和過濾。過濾器包括 Data 過濾器和 Version 過濾器(Current、New、Modified、Deleted)。可以通過 DataSet 內部的 DataTable 建立一個DataView 物件。
 
 
    DataView myDataView = new DataView(myDataSet.Tables["Customers"]);

 

你可以使用上例中 Select 方法同樣的查詢過濾語法,在 RowFilter 屬性上設定一個過濾器。設定排序,使用逗號分隔的排序列,其次是 ASC(預設和可選)或者 DESC 用於升序和降序。

 
            // 基於 CustomerID 列排序
            myDataView.Sort = "CustomerID";

            // 篩選 CustomerID 為 ALFKI 的行
            myDataView.RowFilter = "CustomerID = 'ALFKI'";

 

你也可以基於行的狀態進行過濾(Deleted,New,等等)。下例演示了過濾 Deleted 狀態行。
 
    myDataView.RowStateFilter = DataViewRowState.Deleted;
 

相關文章