數據庫組件 Hxj.Data (二十八)(事務中的查詢,查詢字段字中的子查詢,WhereClip的隱式轉換)
本節講述新版本中新加的功能,以及如何使用。
事務中的查詢
應用場景,有時我們需要事務更新、添加、刪除表的操作,在提交事務又需要對這些進行查詢(不想 降低事務級別讓其他連接查詢事務中的數據變動),在事務內部進行的查詢。
其實只是在DbTrans中增加了FromSection方法。
示例代碼如下:
using (DbTrans trans = DbSession.Default.BeginTransaction())
{
//修改了第一條記錄
trans.Update<Products>(Products._.ProductName, "productname", Products._.ProductID == 1);
//事務內查詢
Products product = trans.From<Products>().ToFirst();
trans.Commit();
}
使用的時候和普通查詢時一模一樣的。
查詢字段中的子查詢
應用場景,在查詢中需要在結果中有一列是通過子查詢獲取的。
例如sql:select customerid,customername,(select count(*) from order where order.customerid=customer.customerid) as ordercount from customer
在FromSection查詢中增加了AddSelect方法,
AddSelect(FromSection fromSection)
AddSelect(FromSection fromSection, string aliasName)
第二個參數為該子查詢後的別名,不然則沒有別名。
示例代碼如下:
DbSession.Default.From<Customers>()
.Select(Customers._.CustomerID, Customers._.ContactName)
.AddSelect(DbSession.Default.From<Orders>().Select(Field.All.Count()).Where (Customers._.CustomerID == Orders._.CustomerID), "ordercount")
.Page(10, 6)
.ToDataTable();
生成的sql語句:
Text: SELECT TOP 10 * FROM
( SELECT TOP 41 [Customers].[CustomerID],[Customers].[ContactName],
( SELECT count(*) AS [cnt] FROM [Orders] WHERE ([Customers].[CustomerID] = [Orders]. [CustomerID]) ) AS [ordercount]
FROM [Customers] ORDER BY [Customers].[CustomerID] DESC ) AS tempIntable
ORDER BY [CustomerID] ASC