深談使用ADO.NET數據列表達式
ADO.NET數據列還是比較常用的,于是我研究了一下表達式也可以通過ADO.NET數據列對象定義,在這里拿出來和大家分享一下,希望對大家有用。作為通過SQL語句計算擴充價格的替代者,ADO.NET數據列可以被定義用于表現擴充價格。在SQL語句和數據列中使用表達式的區別是,如果表達式中的某個字段被修改了,數據列會自動更新表達式所定義的字段,但SQL表達式不會更新數據列。
#T#下面的代碼演示了怎樣使用SQL語句填充數據集的數據表并建立一個新數據列描述計算表達式,該表達式使用數據集的唯一數據表中的其它字段得到。接著該數據表的默認視圖被綁定到ASP.NET的一個叫做grdOrderDetail 的DataGrid控件。這段代碼使用訂單詳細信息建立和填充了一個數據集。接著一個列被添加到該數據集的數據表,用于表現該表達式。該列叫ExtendedPrice,數據類型為浮點型,它的表達式是產品單價和數量列。該表達式能涉及數據表的任意數據列,從當前的數據行中取得值。例如,如果第一行數量為10,單價為7,擴充價格列將使用的值為70。
在計算中表達式可以包括從數據表中其它字段得到的字面值。例如,定義擴充價格的表達式可以稍作改變,使它考慮折扣率:
- oDs.Tables["OrderDetail"].Columns.Add("ExtendedPrice",
- typeof(decimal), "(UnitPrice * Quantity) * (1 - Discount)");
試著改變UnitPrice、Discount或Quantity數據列的值,結果是與從SQL表達式衍生的列不同,ExtendedPrice數據列也被更新了。該特征對應用程序很重要,特別是在用戶能修改購物車,確認改變,然后查看更新后的總價格的情況下。
表達式也可以用于表現其它數據類型,例如邏輯型和字符型值。下面的代碼演示了添加一個字段用于顯示一個作者是否有折扣:
- oDs.Tables["OrderDetail"].Columns.Add("GetsDiscount", typeof(bool),
- "Discount > 0");
你能使用AND、OR或NOT條件建立混合表達式來考慮多個條件,這樣可以加強前面的表達式。還有一些操作符,包括LIKE和IN也可以在表達式中使用。
表達式也能表現字符串值,例如從數據表中取得姓和名并連接到一起。下面的代碼段將ProductName與ProductID連接在一起:
- oDs.Tables["OrderDetail"].Columns.Add("stringfield", typeof(string),
- "ProductID + '-' + ProductName");