Id>1 and Id<10
如上所示,有兩個獨立的條件分別為Id>1
和 Id<10
,用一個邏輯操作符 and
連線起來。
再看下面這條,後面也是兩個獨立條件通過操作符or
連線,幷包在括號裡,作為一個整體。
Id>1 and Id<10 and (Name="MyName" or Name="HisName")
可以看到當中包含幾種元素:欄位名稱,邏輯操作符,比較操作符,條件值,資料型別,括號。兩個概念:獨立的條件和由括號包將它們起來的整體。
那麼可以設計兩個類來代表獨立條件和條件組,如下所示:
//獨立條件虛擬碼:
public class Field
{
public enum Logical {get;set;} //與其它條件之間的邏輯關係
public enum comparer {get;set;} //條件比較符
public Type DataType {get;set;} //資料型別
public string FieldName {get;set;} //欄位名稱
public object QueryValue {get;set;} //條件值
}
由於複雜的查詢的括號是可巢狀的,多重組合的,類似下面的還算簡單的子句:
(dept="mgr" or dept ="bi" ) and(Id>1 and Id<10 and (Name="MyName" or Name="HisName"))
那麼條件組裡就需要包含獨立條件和條件組,並且可巢狀,即組中有組:
//條件組虛擬碼:
public class Block
{
public enum Logical {get;set;} //與其它條件組或獨立條件之間的邏輯關係
public List<Field> Fields {get;}
public List<Block> Blocks {get;}
}
光文字看得似乎容易蒙逼,來張圖或者能輔助理解(圖示僅用來說明分組的層次):
至此,把查詢條件用程式碼描述出來的構思就暫告一段落了。