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}#”新的 DateTime2008,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));

布尔运算符

布尔运算符ANDOR并且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, COUNTMINMAXAVG (平均), 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 –从字符串中的指定点开始获取指定长度的子字符串
posted @ 2019-12-31 18:35  那个远方  阅读(6687)  评论(0编辑  收藏  举报