在上篇文章《豐富的、靈活的查詢方法(第一部分)》提到,針對不一樣的開發任務,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