DataView RowFilter Syntax [C#]
This example describes syntax of DataView.RowFil­ter expression. It shows how to correctly build expression string (without ?SQL injection“) using methods to escape values.

Column names
If a column name contains any of these special characters ~ ( ) # \ / = > < + - * % & | ^ ' " [ ], you must enclose the column name within square brackets [ ]. If a column name contains right bracket ] or backslash \, escape it with backslash (\] or \\).

[C#]

dataView.RowFilter = "id = 10";      // no special character in column name "id"
dataView.RowFilter = "$id = 10";     // no special character in column name "$id"
dataView.RowFilter = "[#id] = 10";   // special character "#" in column name "#id"
dataView.RowFilter = "[[id\]] = 10"; // special characters in column name "[id]"

Literals
String values are enclosed within single quotes ' '. If the string contains single quote ', the quote must be doubled.

[C#]

dataView.RowFilter = "Name = 'John'"        // string value
dataView.RowFilter = "Name = 'John ''A'''"  // string with single quotes "John 'A'"

dataView.RowFilter = String.Format("Name = '{0}'", "John 'A'".Replace("'", "''"));

Number values are not enclosed within any characters. The values should be the same as is the result of int.ToString() or float.ToString() method for invariant or English culture.

[C#]

dataView.RowFilter = "Year = 2008"          // integer value
dataView.RowFilter = "Price = 1199.9"       // float value

dataView.RowFilter = String.Format(CultureInfo.InvariantCulture.NumberFormat,
                     "Price = {0}", 1199.9f);

Date values are enclosed within sharp characters # #. The date format is the same as is the result of DateTime.ToString() method for invariant or English culture.

[C#]

dataView.RowFilter = "Date = #12/31/2008#"          // date value (time is 00:00:00)
dataView.RowFilter = "Date = #2008-12-31#"          // also this format is supported
dataView.RowFilter = "Date = #12/31/2008 16:44:58#" // date and time value

dataView.RowFilter = String.Format(CultureInfo.InvariantCulture.DateTimeFormat,
                     "Date = #{0}#", new DateTime(2008, 12, 31, 16, 44, 58));

Alternatively you can enclose all values within single quotes ' '. It means you can use string values for numbers or date time values. In this case the current culture is used to convert the string to the specific value.

[C#]

dataView.RowFilter = "Date = '12/31/2008 16:44:58'" // if current culture is English
dataView.RowFilter = "Date = '31.12.2008 16:44:58'" // if current culture is German

dataView.RowFilter = "Price = '1199.90'"            // if current culture is English
dataView.RowFilter = "Price = '1199,90'"            // if current culture is German

Comparison operators
Equal, not equal, less, greater operators are used to include only values that suit to a comparison expression. You can use these operators = <> < <= > >=.

Note: String comparison is culture-sensitive, it uses CultureInfo from DataTable.Locale property of related table (dataView.Table.Locale). If the property is not explicitly set, its default value is DataSet.Locale (and its default value is current system culture Thread.Curren­tThread.Curren­tCulture).

[C#]

dataView.RowFilter = "Num = 10"             // number is equal to 10
dataView.RowFilter = "Date < #1/1/2008#"    // date is less than 1/1/2008
dataView.RowFilter = "Name <> 'John'"       // string is not equal to 'John'
dataView.RowFilter = "Name >= 'Jo'"         // string comparison

Operator IN is used to include only values from the list. You can use the operator for all data types, such as numbers or strings.

[C#]

dataView.RowFilter = "Id IN (1, 2, 3)"                    // integer values
dataView.RowFilter = "Price IN (1.0, 9.9, 11.5)"          // float values
dataView.RowFilter = "Name IN ('John', 'Jim', 'Tom')"     // string values
dataView.RowFilter = "Date IN (#12/31/2008#, #1/1/2009#)" // date time values

dataView.RowFilter = "Id NOT IN (1, 2, 3)"  // values not from the list

Operator LIKE is used to include only values that match a pattern with wildcards. Wildcard character is * or %, it can be at the beginning of a pattern '*value', at the end 'value*', or at both '*value*'. Wildcard in the middle of a patern 'va*lue' is not allowed.

[C#]

dataView.RowFilter = "Name LIKE 'j*'"       // values that start with 'j'
dataView.RowFilter = "Name LIKE '%jo%'"     // values that contain 'jo'

dataView.RowFilter = "Name NOT LIKE 'j*'"   // values that don't start with 'j'

If a pattern in a LIKE clause contains any of these special characters * % [ ], those characters must be escaped in brackets [ ] like this [*], [%], [[] or []].

[C#]

dataView.RowFilter = "Name LIKE '[*]*'"     // values that starts with '*'
dataView.RowFilter = "Name LIKE '[[]*'"     // values that starts with '['

The following method escapes a text value for usage in a LIKE clause.

[C#]

public static string EscapeLikeValue(string valueWithoutWildcards)
{
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < valueWithoutWildcards.Length; i++)
  {
    char c = valueWithoutWildcards[i];
    if (c == '*' || c == '%' || c == '[' || c == ']')
      sb.Append("[").Append(c).Append("]");
    else if (c == '\'')
      sb.Append("''");
    else
      sb.Append(c);
  }
  return sb.ToString();
}

[C#]

// select all that starts with the value string (in this case with "*")
string value = "*";
// the dataView.RowFilter will be: "Name LIKE '[*]*'"
dataView.RowFilter = String.Format("Name LIKE '{0}*'", EscapeLikeValue(value));

Boolean operators
Boolean operators AND, OR and NOT are used to concatenate expressions. Operator NOT has precedence over AND operator and it has precedence over OR operator.

[C#]

// operator AND has precedence over OR operator, parenthesis are needed
dataView.RowFilter = "City = 'Tokyo' AND (Age < 20 OR Age > 60)";

// following examples do the same
dataView.RowFilter = "City <> 'Tokyo' AND City <> 'Paris'";
dataView.RowFilter = "NOT City = 'Tokyo' AND NOT City = 'Paris'";
dataView.RowFilter = "NOT (City = 'Tokyo' OR City = 'Paris')";
dataView.RowFilter = "City NOT IN ('Tokyo', 'Paris')";

Arithmetic and string operators
Arithmetic operators are addition +, subtraction -, multiplication *, division / and modulus %.

[C#]

dataView.RowFilter = "MotherAge - Age < 20";   // people with young mother
dataView.RowFilter = "Age % 10 = 0";           // people with decennial birthday

There is also one string operator concatenation +.

Parent-Child Relation Referencing
A parent table can be referenced in an expression using parent column name with Parent. prefix. A column in a child table can be referenced using child column name with Child. prefix.

The reference to the child column must be in an aggregate function because child relationships may return multiple rows. For example expression SUM(Child.Price) returns sum of all prices in child table related to the row in parent table.

If a table has more than one child relation, the prefix must contain relation name. For example expression Child(OrdersToItemsRelation).Price references to column Price in child table using relation named OrdersToItemsRe­lation.

Aggregate Functions
There are supported following aggregate functions SUM, COUNT, MIN, MAX, AVG (average), STDEV (statistical standard deviation) and VAR (statistical variance).

This example shows aggregate function performed on a single table.

[C#]

// select people with above-average salary
dataView.RowFilter = "Salary > AVG(Salary)";

Following example shows aggregate functions performed on two tables which have parent-child relation. Suppose there are tables Orders and Items with the parent-child relation.

[C#]

// select orders which have more than 5 items
dataView.RowFilter = "COUNT(Child.IdOrder) > 5";

// select orders which total price (sum of items prices) is greater or equal $500
dataView.RowFilter = "SUM(Child.Price) >= 500";

Functions
There are also supported following functions. Detailed description can be found here DataColumn.Ex­pression.

CONVERT – converts particular expression to a specified .NET Framework type
LEN – gets the length of a string
ISNULL – checks an expression and either returns the checked expression or a replacement value
IIF – gets one of two values depending on the result of a logical expression
TRIM – removes all leading and trailing blank characters like \r, \n, \t, ? ‘
SUBSTRING – gets a sub-string of a specified length, starting at a specified point in the string
See also
DataView.RowFil­ter – MSDN – expression used to filter rows
DataColumn.Ex­pression – MSDN – syntax description

DataView.RowFilter的使用(包括in,like等SQL中的操作符)相关推荐

  1. 下一代SQL 产品发布会,诚邀您的参加!!包含 Azure数据服务、高级分析和SQL Server(其中包括支持Linux的SQL Server vNext)。

    现在注册 创新和业务转型 不论您是推动业务的决策者,还是下一个突破性应用程序的开发者,数据都是业务的核心 正如微软高层所言,加入我们,实现本地部署到云端的转型,利用微软数据平台最大程度优化您的数据策略 ...

  2. php学生成绩管理系统,数据库使用MySQL,包括源代码和数据库SQL文件,具有学生和教师登录管理功能

    php学生成绩管理系统,数据库使用MySQL,包括源代码和数据库SQL文件,具有学生和教师登录管理功能 数据库SQL文件 /*Navicat Premium Data TransferSource S ...

  3. 编写文件搜索小程序:1. 输入绝对路径以及搜索关键字,2. 搜索指定路径下(包括子文件夹)中名称包含关键字的所有文件并打印出,3. 将当前操作记录日志

    package com.homework;import java.io.File; import java.io.FileOutputStream; import java.io.IOExceptio ...

  4. 练习:创建 一个新类 Gerbil,包括 int getbilNumber,在构造器中初始化它。

    package com.list.arraylist;import java.util.ArrayList;/***创建 一个新类 Gerbil,包括 int getbilNumber,在构造器中初始 ...

  5. DataView.RowFilter使用

    有如下的DataView,现在按大类小类打印出分类列表.         DataView dv = F.Studio.Trade.BLL.ClassBLL.Query().Tables[0].Def ...

  6. DataView RowFilter

    dv.RowFilter = "Country = 'USA'"; dv.RowFilter = "EmployeeID >5 AND Birthdate < ...

  7. 入门Mac快捷键详细分类整理,包括Eclipse和Android Studio中一些常用的快捷键

    [通用] control(^) shift(⇧)   ⬆️ option/alt (⌥) command(⌘) fn 副功能键 [效率] 1.编辑 control + space 切换输入法(改键:a ...

  8. python中函数包括参数函数吗_Python中的函数---函数的定义和参数

    本文是廖雪峰教程的笔记. 函数的定义 定义函数时,需要确定函数名和参数个数 def fun(x1,x2,x3):: 如果有必要,可以先对参数的数据类型做检查: 函数体内部可以用return随时返回函数 ...

  9. 重大要素改变中的机会选择包括_重大要素改变中的机会选择包括:

    [单选题]5.导游人员在面对客人的提问时,正确的做法应该是() [单选题]7.下列哪项不属于领队在团队观光游览时需要提供的服务() [多选题]2.为了预防漏接.导游人员应该做到( ) [单选题]22. ...

最新文章

  1. Go 学习笔记(30)— Go 语言 make 和 new 的区别
  2. php 删除文件时间,php删除文件后重建,文件创建时间(filectime)未变化怎么解决??...
  3. 贪心(用了结构体排序)
  4. zigbee zcl规范及其协议栈实现3 读取服务器端属性值
  5. jQuery 实现上下,左右滑动
  6. 前端---JavaScript基础2
  7. java全jit编译_JVM即时编译(JIT)(转载)
  8. vue 表单 验证 async-validator
  9. 后端:SpringBoot集成Swagger-Bootstrap-UI,界面美观!
  10. 今天英雄联盟服务器维护要到好久,lol今天维护时间是多久 lol维护公告2020最新...
  11. VMware vSAN入门必会知识点
  12. Linux中使用iOStream头文件,linux中C++编译提示找不到iostream文件
  13. vot toolkit的超详细使用(多图)
  14. 火龙果的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. Java 线上问题排查思路与工具使用
  16. 微头条自媒体常见领域,好创作,快速实现自媒体变现
  17. MC服务器启动脚本写法
  18. Sping IOC 理解(转)
  19. exFat格式U盘 文件消失
  20. esp8266保存html文件,八,ESP8266 文件保存数据(示例代码)

热门文章

  1. 华为成功完成中国联通NFV三层解耦测试验证
  2. STF简单修改实现安卓多机同屏控制
  3. Sqli-labs less 53
  4. Appium安装过程
  5. 用移动智能设备访问Ossim系统
  6. 部署SCVMM2012 SP1 集群(1)---部署AD
  7. 安装Ubuntu nginx及其配置安装Php
  8. Spring 注解教程
  9. 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!
  10. 初识人工智能(一):数据分析(二):numpy科学计算基础库(一)