.net中除正则以外的 用于筛选行、计算列中的值或创建聚合列 可用
程序集: System.Data(在 System.Data.dll 中)
语法
VB
C#
C++
F#
JScript
以带有颜色区分的格式查看
复制到剪贴板
打印
Public Property Expression As String Get Set Public Property Expression As String Get Set public string Expression { get; set; } public string Expression { get; set; } public: property String^ Expression { String^ get (); void set (String^ value); } public: property String^ Expression { String^ get (); void set (String^ value); } member Expression : string with get,set member Expression : string with get,set 属性值类型: System ..::. String用来计算列的值,或创建聚合列的表达式。表达式的返回类型由列的 DataType 来确定。
异常
备注
Expression 属性的一个用途是创建计算出的列。 例如,若要计算税值,就要将单价乘以特定地区的税率。由于各地税率不同,不可能将单一税率放在一个列中;于是便用 Expression 属性来计算这个值,如下面这一部分中的 Visual Basic 代码所示: DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086" 第二个用途是创建聚合列。类似于计算出的值,聚合基于 DataTable 中的整个行集执行操作。 一个简单的示例就是计算该集中返回的行数。这便是您将用来计算特定销售人员所完成的交易数的方法,如下面的 Visual Basic 代码所示:
以带有颜色区分的格式查看
复制到剪贴板
打印
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)" DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)" 表达式语法在创建表达式时,使用 ColumnName 属性来引用列。 例如,如果一个列的 ColumnName 是“UnitPrice”,而另一个是“Quantity”,则表达式将是: "UnitPrice * Quantity"
在为筛选器创建表达式时,用单引号将字符串括起来: "LastName = 'Jones'" 如果列名称包含任何非字母数字字符、以数字开头或匹配(不分大小写)以下任意的保留字,则它需要特殊处理,如下面的段落中所述。 与 之间 子级 False 隶属 Is Like Not Null Or 父级 True 如果列名称满足上述条件之一,则它必须被包括在方括号中或在“`”(重音符)引号中。例如,若要在表达式中使用名为“Column#”的列,应写成“[Column#]”: Total * [Column#] 或 "`列号`": Total * `Column#` 如果列名称括在方括号中,则必须通过在所有“]”和“”字符(不是任何其他字符)前添加反斜杠(“”)字符来跳过这些字符。如果列名称括在重音字符中,则它不能包含任何重音字符。例如,名为“Column[]”的列应写成: Total * [Column[]] 或 Total * `Column[]` 用户定义的值用户定义的值可以用在将与列值进行比较的表达式内。应将字符串值括在单引号中(字符串值中的每个单引号字符必须由前将其添加与另一单引号字符转义)。日期值应用井号 (#) 或单引号 (') 括起来,具体取决于数据提供程序。对于数值,允许使用小数和科学记数法。例如: "FirstName = 'John'" "Price <= 50.00" "Birthdate < #1/31/82#" 对于包含枚举值的列,将值强制转换为整数数据类型。例如: "EnumColumn = 5" 正在分析文本表达式所有文本表达式必须采用固定的区域设置来表示。当 DataSet 分析并转换文本表达式时,它始终使用固定区域性,而不是当前区域性。 值用单引号引起来时,字符串文字被标识。例如: 'John' Boolean 文本是 true 和 false;它们未在表达式中引用。 将 Integer 文本 [+-]?[0-9]+ 视为 System.Int32、 System.Int64 或 System.Double。 根据数量的大小, System.Double 可以丢失精度。 例如,如果文本中的号码是 2147483650, DataSet 将首先尝试将数字解析为一个 Int32。 因为数值太大,所有这不会成功。在这种情况下, DataSet 将把数字分析称一个 Int64,这种分析将会成功。 如果文本是一个大于 Int64 最大值的数,则 DataSet 将使用 Double 分析文本。 使用科学记数法的真实文本(如 4.42372E-30)使用 System.Double 进行分析。 不使用科学记数法但使用小数点的真实文本将被视为 System.Decimal。 如果数量超过了 System.Decimal 支持的最大值或最小值,则它被分析为 System.Double。 例如: 142526.144524 将转换为 Decimal。 345262.78036719560925667 将被视为 Double。 运算符使用布尔值 AND、OR 和 NOT 运算符时允许串联。可以使用括号来组合子句和强制优先级。AND 运算符优先于其他运算符。例如: (LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John' 在创建比较表达式时,允许使用下列运算符: < > <= >= <> = IN LIKE 在表达式中还支持下列算术运算符: “+”(加) -(减号) *(乘号) /(除号) %(模数) 字符串运算符若要连接字符串,请使用 + 字符。DataSet 类的 CaseSensitive 属性的值确定字符串比较是否区分大小写。 但是,可以用 DataTable 类的 CaseSensitive 属性重写该值。 通配符在 LIKE 比较中,* 和 % 两者可以互换地作为通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么这些字符应包含在中括号([])中。如果子句中有括号,则每个括号字符都应包括在括号中(例如 [[] 或 []])。在模式的开头和结尾,或者在模式的结尾,或在模式的开头,都允许使用通配符。例如: "ItemName LIKE '*product*'" "ItemName LIKE '*product'" "ItemName LIKE 'product*'" 在字符串的中间不允许使用通配符。例如,不允许 'te*xt'。 父/子关系引用通过在列名称前面加 Parent,就可以在表达式中引用父表。 例如, Parent.Price 引用父表的名为 Price 的列。 当子行具有多个父行时,请使用父 (RelationName).ColumnName。例如,Parent(RelationName).Price 通过关系引用父级表中名为 Price 的列。 通过在列名称前面加一个 Child,就可以在表达式中引用子表中的列。 但是,因为子关系可以返回多行,所以必须在聚合函数中包括对子列的引用。例如, Sum(Child.Price) 将返回子表中名为 Price 的列的总和。 如果某个表有多个子表,则语法是: Child(RelationName)。 例如,如果某个表有两个子表,它们的名称分别为 Customers 和 Orders,并且 DataRelation 对象被命名为 Customers2Orders,则引用将为: Avg(Child(Customers2Orders).Quantity) 聚合支持下列聚合类型: Sum(求和) Avg(平均) Min(最小值) Max(最大值) Count(计数) StDev(统计标准偏差) Var(统计方差)。 聚合通常沿着关系执行。通过使用上面列出的函数之一和上面“父/子关系引用”中详述的子表列,来创建聚合表达式。例如: Avg(Child.Price) Avg(Child(Orders2Details).Price) 聚合也可以在单个表上执行。例如,若要为名为“Price”的列中的数字创建汇总,就用: Sum(Price)
如果表没有行,聚合函数将返回 nullNothingnullptr null 引用(在 Visual Basic 中为 Nothing) 。 数据类型总是可以通过检查列的 DataType 属性来确定。 还可以使用 Convert 函数来转换数据类型,如下面这一部分所示。 函数还支持下列函数: CONVERT
例如:myDataColumn.Expression="Convert(total,'System.Int32')" 所有转换都是有效的,只有下列情况例外: Boolean 只能与 Byte、 SByte、 Int16、 Int32、 Int64、 UInt16、 UInt32、 UInt64、 String 和它本身相互转换。 Char 只能被强制在 Int32、 UInt32、 String 和其本身之间。 DateTime 只能被强制在 String 和其本身之间。 TimeSpan 只能被强制在 String 和其本身之间。 LEN
例如:myDataColumn.Expression="Len(ItemName)" ISNULL
例如:myDataColumn.Expression="IsNull(price,-1)" IIF
例如:myDataColumn.Expression = "IIF(total>1000,'expensive','dear') TRIM
SUBSTRING
例如:myDataColumn.Expression = "SUBSTRING(phone,7,8)"
示例
下面的示例在 DataTable 中创建三个列。 第二和第三列包含表达式;第二列使用可变税率计算税款,第三列将计算的结果添加到第一列的值。结果表显示在 DataGrid 控件中。
VB
C#
C++
F#
JScript
以带有颜色区分的格式查看
复制到剪贴板
打印
Private Sub CalcColumns() Dim rate As Single = .0862 dim table as DataTable = New DataTable ' Create the first column. Dim priceColumn As DataColumn = New DataColumn With priceColumn .DataType = System.Type.GetType("System.Decimal") .ColumnName = "price" .DefaultValue = 50 End With ' Create the second,calculated,column. Dim taxColumn As DataColumn = New DataColumn With taxColumn .DataType = System.Type.GetType("System.Decimal") .ColumnName = "tax" .Expression = "price * 0.0862" End With ' Create third column Dim totalColumn As DataColumn = New DataColumn With totalColumn .DataType = System.Type.GetType("System.Decimal") .ColumnName = "total" .Expression = "price + tax" End With ' Add columns to DataTable With table.Columns .Add(priceColumn) .Add(taxColumn) .Add(totalColumn) End With Dim row As DataRow= table.NewRow table.Rows.Add(row) Dim view As New DataView view.Table = table DataGrid1.DataSource = view End Sub Private Sub CalcColumns() Dim rate As Single = .0862 dim table as DataTable = New DataTable ' Create the first column. Dim priceColumn As DataColumn = New DataColumn With priceColumn .DataType = System.Type.GetType("System.Decimal") .ColumnName = "price" .DefaultValue = 50 End With ' Create the second,column. Dim taxColumn As DataColumn = New DataColumn With taxColumn .DataType = System.Type.GetType("System.Decimal") .ColumnName = "tax" .Expression = "price * 0.0862" End With ' Create third column Dim totalColumn As DataColumn = New DataColumn With totalColumn .DataType = System.Type.GetType("System.Decimal") .ColumnName = "total" .Expression = "price + tax" End With ' Add columns to DataTable With table.Columns .Add(priceColumn) .Add(taxColumn) .Add(totalColumn) End With Dim row As DataRow= table.NewRow table.Rows.Add(row) Dim view As New DataView view.Table = table DataGrid1.DataSource = view End Sub private void CalcColumns() { DataTable table = new DataTable (); // Create the first column. DataColumn priceColumn = new DataColumn(); priceColumn.DataType = System.Type.GetType("System.Decimal"); priceColumn.ColumnName = "price"; priceColumn.DefaultValue = 50; // Create the second,column. DataColumn taxColumn = new DataColumn(); taxColumn.DataType = System.Type.GetType("System.Decimal"); taxColumn.ColumnName = "tax"; taxColumn.Expression = "price * 0.0862"; // Create third column. DataColumn totalColumn = new DataColumn(); totalColumn.DataType = System.Type.GetType("System.Decimal"); totalColumn.ColumnName = "total"; totalColumn.Expression = "price + tax"; // Add columns to DataTable. table.Columns.Add(priceColumn); table.Columns.Add(taxColumn); table.Columns.Add(totalColumn); DataRow row = table.NewRow(); table.Rows.Add(row); DataView view = new DataView(table); dataGrid1.DataSource = view; } private void CalcColumns() { DataTable table = new DataTable (); // Create the first column. DataColumn priceColumn = new DataColumn(); priceColumn.DataType = System.Type.GetType("System.Decimal"); priceColumn.ColumnName = "price"; priceColumn.DefaultValue = 50; // Create the second,column. DataColumn taxColumn = new DataColumn(); taxColumn.DataType = System.Type.GetType("System.Decimal"); taxColumn.ColumnName = "tax"; taxColumn.Expression = "price * 0.0862"; // Create third column. DataColumn totalColumn = new DataColumn(); totalColumn.DataType = System.Type.GetType("System.Decimal"); totalColumn.ColumnName = "total"; totalColumn.Expression = "price + tax"; // Add columns to DataTable. table.Columns.Add(priceColumn); table.Columns.Add(taxColumn); table.Columns.Add(totalColumn); DataRow row = table.NewRow(); table.Rows.Add(row); DataView view = new DataView(table); dataGrid1.DataSource = view; }
平台
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |