Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第二部分:适应不一样数据库系统的查询)

在上篇文章《丰富的、灵活的查询方法(第一部分)》提到,针对不一样的开发任务,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

  • _DbtPerson.Select("ismale=1") //查询全部性别为男性的人
    _DbtPerson.Select( SqlExpression.Equal("ismale",1))
  • _DbtPerson.Select("height>103 and ismale=0") //查询全部身高超过103的女性
    _DbtPerson.Select( SqlExpression.And(
    SqlExpression.Greater("height",103),
    SqlExpression.Equal("ismale",0)
    ));

看上去,使用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

相关文章
相关标签/搜索