LINQ 與資料存取:ASP.NET篇(3)- Why LINQ

透過 ADO.NET 從連線資料庫取回資料後,由於 ADO.NET 物件本身並無支援複雜的資料運算語法,因此接下來想要針對資料進行額外的運算作業並不輕鬆,在這種情形下,導入LINQ可以讓相關的資料處理變得容易。回到前一篇討論的資料萃取範例,這一次我們利用另外一個網頁範例進行說明。以下是執行畫面:


此畫面包含三組資料,第一組是完整的商品清單,第二組從清單中萃取出圖書類的資料,第三組則是進一步從圖書類的資料中,萃取出書名有HTML5的資料。

首先透過SQL取回商品資料,程式碼如下:

SqlConnection conn = new SqlConnection(
    @"Server=Tim-PC;DataBase = KTMS ;Trusted_Connection=True ; ");
string sql = "SELECT ProductID,ProductName,UnitPrice,CategoryID FROM Products" ;
DataSet ds = new DataSet();

using (conn)
{
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
adapter.Fill(ds, "Products");
}           
gridView.DataSource = ds.Tables[0];
gridView.DataBind();

由於第一組資料並不需要特別處理,因此直接繫結至GridView呈現在網頁上。接下來取出第二組資料,先將其轉換成為支援LINQ運算的型別資料如下:

EnumerableRowCollection<DataRow> table = ds.Tables[0].AsEnumerable();

接下來進行LINQ運算處理,萃取出其中類別為圖書(CategoryID=101068)的資料:

EnumerableRowCollection<DataRow> rows_books =
                from row in table
                where row["CategoryID"].ToString() == "101068"
                select row;
gridView_books.DataSource = rows_books.CopyToDataTable();
gridView_books.DataBind();

其中的 where 敘述將圖書分類的資料萃取出來,然後再完成第二組GridView控制項的繫結。最後是第三組GridView資料的萃取,所需的程式碼如下:

EnumerableRowCollection<DataRow> rows_html5 =
                from row in table
                where row["ProductName"].ToString().Contains("HTML5")
                select row;
gridView_html5.DataSource = rows_html5.CopyToDataTable();
gridView_html5.DataBind();

原理相同,只是這一次的 where 敘述針對其中的 ProductName 欄位內容字串,進行 Contain() 方法比對,以檢視是否書籍名稱中,存在 HTML5 子字串,藉此篩選出HTML5書籍。

如你所見,當我們透過ADO.NET將資料取出,可以再利用 LINQ 進行更細膩的處理。



LINQ 與資料存取系列

沒有留言: