DataTable系列之02-DataColumn.Expression属性
DataColumn.Expression属性范例代码:
MSDN地址: http://msdn.microsoft.com/en-us/library/system.data.datatable.compute.aspx
下面的示例在 DataTable 中创建三个列。第二和第三列包含表达式;第二列使用可变税率计算税款,第三列将计算的结果添加到第一列的值。结果表显示在 DataGrid 控件中。
1 private void CalcColumns() 2 { 3 DataTable table = new DataTable (); 4 5 // Create the first column. 6 DataColumn priceColumn = new DataColumn(); 7 priceColumn.DataType = System.Type.GetType("System.Decimal"); 8 priceColumn.ColumnName = "price"; 9 priceColumn.DefaultValue = 50; 10 11 // Create the second, calculated, column. 12 DataColumn taxColumn = new DataColumn(); 13 taxColumn.DataType = System.Type.GetType("System.Decimal"); 14 taxColumn.ColumnName = "tax"; 15 taxColumn.Expression = "price * 0.0862"; 16 17 // Create third column. 18 DataColumn totalColumn = new DataColumn(); 19 totalColumn.DataType = System.Type.GetType("System.Decimal"); 20 totalColumn.ColumnName = "total"; 21 totalColumn.Expression = "price + tax"; 22 23 // Add columns to DataTable. 24 table.Columns.Add(priceColumn); 25 table.Columns.Add(taxColumn); 26 table.Columns.Add(totalColumn); 27 28 DataRow row = table.NewRow(); 29 table.Rows.Add(row); 30 DataView view = new DataView(table); 31 dataGrid1.DataSource = view; 32 }
1. 在创建表达式时,使用 ColumnName 属性来引用列。例如,如果一个列的 ColumnName 是“UnitPrice”,而另一个是“Quantity”,则表达式将是:
"UnitPrice * Quantity"
2. 在为筛选器创建表达式时,用单引号将字符串括起来: "LastName = 'Jones'"
3. 用户定义的值可以用在将与列值进行比较的表达式内。字符串的值应括在单引号内。日期值应放在磅符号 (#) 内。对于数值,允许使用小数和科学记数法。
例如:"FirstName = 'John'" "Price <= 50.00" "Birthdate < #1/31/82#"
对于包含枚举值的列,将值强制转换为整数数据类型。例如:"EnumColumn = 5"
4. 通配符
在 LIKE 比较中,* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么这些字符应用中括号([])对其进行转义。如果子句中有中括号,那么中括号字符应用中括号对其进行转义(例如 [[] 或 []])。在模式的开头和结尾,或者在模式的结尾,或在模式的开头,都允许使用通配符。例如:
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
在字符串的中间不允许使用通配符。例如,不允许 'te*xt'。
5. 父/子关系引用
通过在列名称前面加 Parent,就可以在表达式中引用父表。例如,Parent.Price 引用父表的名为 Price 的列。
通过在列名称前面加一个 Child,就可以在表达式中引用子表中的列。但是,因为子关系可以返回多行,所以必须在聚合函数中包括对子列的引用。例如,Sum(Child.Price) 将返回子表中名为 Price 的列的总和。
如果某个表有多个子表,则语法是:Child(RelationName)。例如,如果某个表有两个子表,它们的名称分别为 Customers 和 Orders,并且 DataRelation 对象被命名为Customers2Orders,则引用将为:Avg(Child(Customers2Orders).Quantity)
6. IsNull
例如:myDataColumn.Expression="IsNull(price, -1)"
7. IIF
例如:myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
8. SubString
格式: SUBSTRING(expression, start, length)
myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
9. Len
myDataColumn.Expression="Len(ItemName)"