LINQ 與資料存取 (5) - 強型別模式的 LINQ to SQL 查詢

本系列的前一篇「LINQ 與資料存取 (4) - 透過 LINQ to SQL 進行資料表查詢」當中示範了基本的 LINQ to SQL 查詢技巧,這一篇再來看看強型別模式的查詢作業。

回到第四篇中的範例,其中針對 Table 物件進行查詢作業,由於Category 類別屬性對應至 KTMS 資料庫 Categories 資料表的同名欄位,因此直接透過屬性引用即可將欄位值取出,除此之外,你可以選擇進一步的建立強式型別以取代 DataContext 物件的操作。

現在調整此範例,於其中配置以下的類別:


public class CCategory : DataContext
{
 public CCategory(string conn) : base(conn) { }
public Table<Category> Categories;
}

此類別繼承 DataContext ,同時定義Table< Category> 型別變數 Categories ,其透過 CCategory 類別對應至底層資料庫的 Categories 資料表,接下來利用 CCategory 取代 DataContext ,並且引用 Categories 屬性來取得資料表的內容,重新建立程式碼如下:

static void Main(string[] args)
{
string conn = "Server=Tim-PC;Database=KTMS;Trusted_Connection=True;";
CCategory ccategory = new CCategory(conn);
      
    var rows =
from row in ccategory.Categories
          select row;
    foreach (var row in rows)
         Console.WriteLine(row.CategoryID + ":" + row.CategoryName);
Console.Read();
}

以網底標示的程式碼,以 CCategory 類別取代 Context ,而且不需要調用 GetTable() 方法,引用屬性 Categories 屬性即可取得相同的資料內容。
相較於 DataContext ,強型別讓資料欄位的存取更為直觀,同時亦能夠透過物件變數的 . 運算子,撰寫 LINQ 查詢運算式,資料查詢程式至此能夠更完美的與程式言作結合。以下列舉完調整後的範例內容。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace LINQ_to_SQL_Type
{
    class Program
    {
        static void Main(string[] args)
        {
            string conn = "Server=Tim-PC;Database=KTMS;Trusted_Connection=True;";
            CCategory ccategory = new CCategory(conn);
      
            var rows =
                from row in ccategory.Categories
                select row;
            foreach (var row in rows)
                Console.WriteLine(row.CategoryID + ":" + row.CategoryName);
            Console.Read();

        }
    }
    [Table(Name = "Categories")]
    public class Category
    { 
        [Column]
        public int CategoryID;
        [Column]
        public string CategoryName;
        [Column]
        public string Description;
    }
    public class CCategory : DataContext
    {
        public CCategory(string conn) : base(conn) { }
        public Table<Category> Categories;
    }
}


沒有留言: