Query 對象
對于(yú)簡單的(de)查詢,我們可以(yǐ)直接傳遞 Id 字段或者 Guid 字段的(de)值獲取數據,不(bù)過對于(yú)複雜查詢我們通常需要(yào / yāo)構建 Query 對象,設置條件及排序等規則進行查詢。
Query 對象可以(yǐ)作爲(wéi / wèi)參數傳遞給 Repository 數據倉庫的(de) GetAsync、GetAllAsync 以(yǐ)及 ExistsAsync方法。
我們可以(yǐ)使用靜态類 Q 快速創建 Query 對象,例如:
var query = Q.NewQuery();
if (!string.IsNullOrEmpty(keyword))
{
query.WhereLike(`Title`, $"%{keyword}%");
}
if (!string.IsNullOrEmpty(order))
{
query.OrderByDesc(order);
}
2
3
4
5
6
7
8
9
或者也(yě)可以(yǐ)直接設置條件快速創建 Query 對象,例如:
var query = Q.Where(Title, "标題");
Where 篩選
Datory 提供了(le/liǎo)許多有用的(de)方法來(lái)使編寫 Where 條件變得容易。
所有 Where 方法都帶有 NOT 和(hé / huò) OR 運算符的(de)重載,可以(yǐ)使用 OrWhereNull 來(lái)應用布爾 OR 運算符和(hé / huò) WhereNotNull 或 OrWhereNotNull 來(lái)否定條件。
Where 方法第一(yī / yì /yí)個(gè)參數是(shì)字段名,第二個(gè)參數是(shì)可選的(de),默認爲(wéi / wèi) = 操作。
var query = Q.Where("Id", 10);
// 等同于(yú)
var query = Q.Where("Id", "=", 10);
2
3
我們可以(yǐ)采用鏈式操作組合多個(gè) Where 條件,條件之(zhī)間是(shì) AND 關系:
var query = Q.Where("Score", ">", 10).WhereDate("LastActivityDate", ">=", dateTime);
我們可以(yǐ)通過 NOT 和(hé / huò) OR 運算符實現非及或操作:
var query = Q.WhereNot(GroupId, groupId).OrWhere("Title", "标題");
要(yào / yāo)将條件分組,隻需将它們包裝在(zài)另一(yī / yì /yí)個(gè) Where 塊中。
var query = Q.Where("Title", "标題").Where(q =>
q.Where("Taxis" ">", 0).OrWhere("Count", 0)
);
2
3
系統将解析爲(wéi / wèi)以(yǐ)下 SQL 查詢條件:
WHERE Title = '标題' AND (Taxis > 0 OR Count = 0)
Order 排序
可以(yǐ)使用 OrderBy 以(yǐ)及 OrderByDesc 對數據列表進行排序,例如:
var repository = new Repository<DataModel>(settingsManager.Database, settingsManager.Redis);
var query = Q.OrderBy("CreatedDate").OrderByDesc("Name");
var list = await repository.GetAllAsync(query);
2
3
系統将解析爲(wéi / wèi)以(yǐ)下 SQL 排序:
ORDER BY CreatedDate, Name DESC
數目限制
可以(yǐ)使用 Limit 以(yǐ)及 Offset 限制從數據庫返回的(de)結果數量。
var query = Q.OrderByDesc("Id").Limit(10);
以(yǐ)上(shàng)代碼将返回前10條數據。
var query = Q.OrderByDesc("Id").Offset(10).Limit(20);
以(yǐ)上(shàng)代碼将跳過前10條數據并返回後20條數據。
除了(le/liǎo)通過 Limit 以(yǐ)及 Offset 限制數量,我們也(yě)可以(yǐ)使用 ForPage 方法快速對數據進行分頁:
var query = Q.OrderByDesc("Id").ForPage(page, pageSize);
參數 page 代表獲取第幾頁, pageSize 代表一(yī / yì /yí)頁返回多少行,如果不(bù)傳 pageSize 參數,默認将返回15行每頁,可以(yǐ)通過将整數作爲(wéi / wèi)第二個(gè)參數傳遞來(lái)覆蓋此值。
字符串操作
Query 查詢提供 WhereStarts,WhereEnds,WhereContains 和(hé / huò) WhereLike 方法來(lái)處理類似類型的(de)字符串。
var query = Q.WhereLike("Title", "%中國(guó)%");
以(yǐ)上(shàng)代碼将查詢所有标題包含 中國(guó) 的(de)數據,和(hé / huò) SQL LIKE 語句一(yī / yì /yí)樣,我們使用 WhereLike 方法時(shí),必須手動添加通配符 %。
日期操作
Query 查詢提供 WhereDate,WhereTime 和(hé / huò) WhereDatePart 方法來(lái)處理日期列。
var query = Q.WhereDate("CreatedDate", "2021-01-01");
以(yǐ)上(shàng)代碼将查詢日期時(shí)間列的(de)日期部分。