如何利用 DataColumn 的 Expression 屬性來做到類似 SQL Server 的計算資料行

本文將介紹如何利用 DataColumn 的 Expression 屬性來做到類似 SQL Server 的計算資料行。

SQL Server 提供計算資料行這種特殊的資料行型態,用來儲存從同一個資料表中計算而來的值,預設情況計算資料行的內容並不會真正儲存在資料庫之中,只有在被 SELECT 時才會動態計算出值。其實在 ADO.Net 中的 DataColumn 也有類似的功能,您可以透過 DataColumn 的 Expression 屬性來實作。

  • 下列程式碼示範在 DataTable 中定義兩個 DataColumn ,相當於資料庫中的資料表的兩個欄位,其中 c1 儲存"是"或"否"兩種值,若希望利用 Expression 屬性來將 c1 的值改以 1 或 0 來表示,以利後續儲存至 SQL Server 的 bit 型態的欄位之中。其中第 5 列的部分,利用 Expression 屬性中所支援的 IIF 函數來判斷 c1 欄位的內容,若為"是"則 c2 為 1 (亦即 True),反之為 0 (亦即 False),如此一來就可以很容易地做欄位的計算和轉換。

 

   1:  DataTable dt = new DataTable();
   2:  dt.Columns.Add(new DataColumn("c1", Type.GetType("System.String")));
   3:   
   4:  DataColumn dc = new DataColumn("c2", Type.GetType("System.Boolean"));
   5:  dc.Expression = "iif (c1 = '是',1,0)";
   6:  dt.Columns.Add(dc);
   7:   
   8:  DataRow dr = dt.NewRow();
   9:  dr[0] = "是";
  10:  dt.Rows.Add(dr);
  11:   
  12:  foreach (DataRow row in dt.Rows)
  13:  {
  14:      Console.WriteLine(string.Format("{0}.{1}", row[0], row[1]));
  15:  }
  16:   
  17:  Console.Read();