同樣,它也可能使用SelectQueryBuilder通過創建’嵌套的WHERE子句’來實現。
SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Orders");
// Add 'Criteria' column to level 1
query.AddWhere("CustomerID", Comparison.Equals, "VINET", 1);
query.AddWhere("OrderDate", Comparison.LessThan,
new DateTime(2005,1,1), 1);
// Add 'Or...' column to level 2
query.AddWhere("CustomerID",
Comparison.Equals, "TOMSP", 2);
// Add the date selection clause
WhereClause clause =query.AddWhere("OrderDate", Comparison.LessThan,
new DateTime(2004,6,30), 2);
// Add a nested clause to the captured clause
clause.AddClause(LogicOperator.Or,
Comparison.GreaterThan, new DateTime(2006,1,1));
注意到我用了一個WhereClause對象,它由AddWhere調用返回。接著調用clause.AddClause創建一個嵌套的子句柄,並且選擇通過指定LogicOperator.Or來把它OR到第一個子句上。所產生的語句如下:
SELECT Orders.*
FROM Orders
WHERE
(
(CustomerID = 'VINET')
AND (OrderDate < '2005/01/01 12:00:00')
)
OR
(
(CustomerID = 'TOMSP')
AND (OrderDate < '2004/06/30 12:00:00' OR
OrderDate > '2006/01/01 12:00:00')
)
請注意這個例子中日期包含’12:00:00’,這是因為我在DateTime構造體中忽略了時間。但這只要由於我的習慣。如果我使用new DateTime(2006,1,1,0,0,0),日期字符串將包含’00:00:00’。
結論
在介紹中我就提到,SelectQueryBuilder是CodeEngine框架的一部分。這個框架 也包含了DeleteQueryBuilder,UpdateQueryBuilder,InsertQueryBuilder。我在通過我的C#DAL產生器生成的代碼中使用這些生成器。你能從www.code-engine.com上下載一份 框架DLL的拷貝。在這期間我也將發布其它的查詢生成器的源代碼。同時如果你有什麼問題,評價或建議,請及時與我聯系。