程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 數據庫組件 Hxj.Data (二十八)

數據庫組件 Hxj.Data (二十八)

編輯:關於ASP.NET

數據庫組件 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved