在上篇文章《丰富的、灵活的查询方法(第一部分)》提到,针对不一样的开发任务,Xqk.Data数据框架提供了丰富的、灵活的查询方法,文章还介绍了一些查询方法,在这些方法中,大部分都有一个共同的whereStr参数,该参数用来代表查询条件,即SQL语句中紧跟WHERE关键字的部分。须要注意的是,不一样的数据库系统都有一些特定的行为。所以,若是代码要想适应不一样的数据库系统,请确保提供的whereStr能在不一样数据库系统下都能正确执行,且可以获得相同的结果或行为,或者为不一样的数据库系统提供不一样的whereStr值。数据库
DbTable<TEntity>类为每一个使用whereStr查询方法提供了相应的SqlExpression类型whereExpr参数的重载方法。 如:c#
public TEntity[] Select(SqlExpression whereExpr); public TEntity SelectSingle(SqlExpression whereExpr); public T SelectValue<T>(string fieldname, SqlExpression whereExpr); public T[] SelectFieldValues<T>(string field, SqlExpression whereExpr);
Xqk.Data框架的SqlExpression类被设计成能适应不一样的数据库系统。使用SqlExpression参数能确保代码能在不一样数据库系统下都能正确执行,且可以获得相同的结果或行为。框架
SqlExpression,即SQL表达式。包含3个属性:Operate,Left,Right,对应于SQL表达式的操做符,左操做数和右操做数。
Operate 表示操做符,其类型为SqlExpressionOperate枚举,定义以下:ide
public enum SqlExpressionOperate { And, Or, Not, Equal, Greater, Lower, NotEqual, NotGreater, NotLower, Comma, Text, StartsWith }
Left表示左操做数,其类型为string,通常是数据列的名称。
Right表示右操做数,其类型为object,通常须要根据操做符来判断。函数
虽然SqlExpression提供了公共构造函数,但不建议用构造函数来生成SqlExpression实例,而应该使用Xqk.Data数据框架提供的一整套与SQL表达式操做符相对应的静态函数。例如,在第一个例子中,咱们可使用如下的一些查询表达式:ui
看上去,使用SqlExpression比使用string要复杂,可是不要忘了,使用SqlExpression的一个主要目的是为适应不一样的数据库系统。下面就以StartsWith表达式为例来讲明这个重要的特色。设计
为了查询数据表中姓“张”的人,在MySQL中咱们能够用
instr(`name`,"张")=1; 或 substr(`name`,1,1)="张"
而在SQLite下只能用
substr(`name`,1,1)="张"
在Sql Server中要用
substring(`name`,1,1)="张" 或 charindex("张",name)=1;
因此必须为不一样的数据库系统提供不一样的whereStr,而使用SqlExpression,则用
SqlExpression.StartsWith("name", "张")
就能够在不一样数据库系统中实现查询name列以张开头的记录。code