DataView RowFilter语法[C#]
本实施例描述的语法DataView.RowFilter 表达。它显示了如何使用转义值的方法正确构建表达式字符串(不带“ SQL注入”)。
列名
如果列名称包含任何这些特殊字符~
(
)
#
\
/
=
>
<
+
-
*
%
&
|
^
'
"
[
]
,则必须将列名称括在方括号内[
]
。如果列名包含右括号]
或反斜杠\
,请使用反斜杠(\]
或\\
)将其转义。
[C#]
dataView.RowFilter = “ id = 10” ; //列名“ id”中没有特殊字符 dataView.RowFilter = “ $ id = 10” ; //列名“ $ id”中没有特殊字符 dataView.RowFilter = “ [#id] = 10” ; //列名“ #id”中的特殊字符“#” dataView.RowFilter = “ [[id \]] = 10” ; //列名“ [id]”中的特殊字符
文字
字符串值用单引号引起来 '
'
。如果字符串包含单引号 '
,则引号必须加倍。
[C#]
dataView.RowFilter = “名称='约翰'” //字符串值 dataView.RowFilter = “名称='约翰'A'''” // //用单引号引起来的字符串“ John'A '” dataView.RowFilter = String .Format (“ Name ='{0}'”,“ John'A '” .Replace(“'”,“”“)));
数字值不包含在任何字符中。这些值应与不变或英语文化的结果int.ToString()
或 float.ToString()
方法相同。
[C#]
dataView.RowFilter = “年份= 2008” //整数值 dataView.RowFilter = “价格= 1199.9” //浮点值 dataView.RowFilter = String .Format (CultureInfo .InvariantCulture.NumberFormat, “ Price = {0}”,1199.9f);
日期值包含在尖括号内 #
#
。日期格式与DateTime.ToString()
不变或英语文化的方法的结果相同 。
[C#]
dataView.RowFilter = “ Date =#12/31/2008#” //日期值(时间为00:00:00) dataView.RowFilter = “ Date =#2008-12-31#” //也支持此格式 dataView.RowFilter = “日期=#12/31/2008 16:44:58#” //日期和时间值 dataView.RowFilter = String .Format (CultureInfo .InvariantCulture.DateTimeFormat,“ Date =#{0}#”,新的 DateTime(2008,12,31,16,44,58 ));
或者,您可以将所有值括在单引号中'
'
。这意味着您可以将字符串值用于数字或日期时间值。在这种情况下,将使用当前区域性将字符串转换为特定值。
[C#]
dataView.RowFilter = “ Date = '12 / 31/2008 16:44:58'” //如果当前区域性是英语 dataView.RowFilter = “ Date = '31 .12.2008 16:44:58'” //如果当前区域性是德国人 dataView.RowFilter = “ Price ='1199.90'” // //如果当前区域性是英语 dataView.RowFilter = “ Price ='1199,90'” //如果当前区域性是德语
比较运算符
等于,不等于,更少,更大的运算符用于仅包含适合比较表达式的值。您可以使用这些运算符=
<>
<
<=
>
>=
。
注:字符串比较是 文化的敏感,它使用的CultureInfo从DataTable.Locale 相关表的属性(dataView.Table.Locale
)。如果未显式设置该属性,则其默认值为DataSet.Locale(并且其默认值为当前系统区域性Thread.CurrentThread.CurrentCulture)。
[C#]
dataView.RowFilter = “ Num = 10” //数字等于10 dataView.RowFilter = “ Date <#1/1/2008#” //日期小于1/1/2008 dataView.RowFilter = “名称<> 'John'“ //字符串不等于' John'dataView.RowFilter = ” Name> ='Jo'“ //字符串比较
运算符IN用于仅包括列表中的值。您可以将运算符用于所有数据类型,例如数字或字符串。
[C#]
dataView.RowFilter = “ Id IN(1、2、3)” //整数值 dataView.RowFilter = “价格IN( 1.0,9.9,11.5 )” //浮点值 dataView.RowFilter = “名称IN('John', 'Jim','Tom')“ //字符串值 dataView.RowFilter = ”日期输入(#12/31/2008#,#1/1/2009#)“ //日期时间值 dataView.RowFilter = “ Id NOT IN(1、2、3)” //不在列表中的值
运算符LIKE用于仅包含与通配符匹配模式的值。通配符为*
或 %
,它可以在模式的开头,'*value'
结尾'value*'
或两者都在'*value*'
。通配符在百通的中间'va*lue'
是不允许的。
[C#]
dataView.RowFilter = “ Name LIKE'j *'” //以'j' 开头的值 dataView.RowFilter = “ Name LIKE'%jo%'” //包含'jo'的值 dataView.RowFilter = “名称 不像'j *'” //不以'j'开头的值
如果在LIKE子句模式包含任何这些特殊字符 *
%
[
]
,这些字符必须用括号逃脱[
]
这样 [*]
,[%]
,[[]
或[]]
。
[C#]
dataView.RowFilter = “ Name LIKE'[*] *'” //以'*' 开头的值 dataView.RowFilter = “ Name LIKE'[[] *'” // //以'['开头的值
下面的方法对LIKE子句中使用的文本值进行转义。
[C#]
公共静态字符串 EscapeLikeValue(字符串 valueWithoutWildcards)
{
StringBuilder sb = new StringBuilder();
为(int i = 0; i <valueWithoutWildcards.Length; i ++)
{
char c = valueWithoutWildcards [i];
如果(c == '*' || c == '%' || c == '[' || c == ']')
sb.Append(“ [”).Append(c).Append(“]”);
否则(c == '\'')
sb.Append(“''”);
其他
sb.Append(c);
}
返回 sb.ToString();
}
[C#]
//选择所有以值字符串(在本例中为“ *”)开头的
字符串 value = “ *” ;
// dataView.RowFilter将是:“ Name LIKE'[*] *'”
dataView.RowFilter = String .Format (“ Name LIKE'{0} *'”,EscapeLikeValue(value));
布尔运算符
布尔运算符AND
,OR
并且NOT
被用来连接表达式。运算符NOT优先于AND运算符,并且优先于OR运算符。
[C#]
//运营商,拥有优先级高于OR运算符,括号需要
dataView.RowFilter = “城市= '东京' AND(年龄<20或年龄> 60)” ;
//以下示例执行相同的
dataView.RowFilter = “ City <>' Tokyo'AND City <>'Paris'” ;
dataView.RowFilter = “没有城市='东京'而没有城市='巴黎'” ;
dataView.RowFilter = “否(城市=“东京”或城市=“巴黎”)”;
dataView.RowFilter = “城市不在('东京','巴黎')” ;
算术和字符串运算符
算术运算符是加+
,减-
,乘*
,除 /
和模%
。
[C#]
dataView.RowFilter = “母亲年龄-<20岁”; //母亲年轻的人 dataView.RowFilter = “年龄%10 = 0” ; //十年生日的人
还有一个字符串运算符 串联 +
。
亲子关系参照
甲 父表可以在表达式中使用父列名与被引用Parent.
的前缀。在A柱 子表可以使用儿童列名与引用 Child.
前缀。
对子列的引用必须在聚合函数中,因为子关系可能返回多行。例如,表达式SUM(Child.Price)
返回子表中与父表中的行相关的所有价格的总和。
如果一个表具有多个子关系,则前缀必须包含关系名称。例如,表达式Child(OrdersToItemsRelation).Price
使用名为OrdersToItemsRelation的关系引用子表中的Price列。
汇总功能
支承有下列聚合函数SUM
, COUNT
,MIN
,MAX
,AVG
(平均), STDEV
(统计标准偏差)和 VAR
(统计方差)。
本示例显示在单个表上执行的聚合函数。
[C#]
//选择具有高于平均工资数据的人
View.RowFilter = “ Salary> AVG(Salary)” ;
以下示例显示了在具有父子关系的两个表上执行的聚合函数。假设有带有父子关系的表Orders和Items。
[C#]
//选择具有5个以上项目的订单
dataView.RowFilter = “ COUNT(Child.IdOrder)> 5” ;
//选择总价(商品总价)大于或等于$ 500的
订单dataView.RowFilter = “ SUM(Child.Price)> = 500” ;
功能
还支持以下功能。详细说明可以在这里找到DataColumn.Expression。
CONVERT
–将特定的表达式转换为指定的.NET Framework类型LEN
–获取字符串的长度ISNULL
–检查表达式,然后返回检查的表达式或替换值IIF
–根据逻辑表达式的结果获取两个值之一TRIM
–删除所有前导和尾随空白字符,例如\ r,\ n,\ t,,'SUBSTRING
–从字符串中的指定点开始获取指定长度的子字符串