2
SELECT [quantity ]
,[price]
FROM [dbo].[orderItem]
ORDER BY (quantity * price) DESC
我應該怎麼寫個createCriteria生成SQL像上面的例子嗎?個createCriteria對兩列排序合併
SELECT [quantity ]
,[price]
FROM [dbo].[orderItem]
ORDER BY (quantity * price) DESC
我應該怎麼寫個createCriteria生成SQL像上面的例子嗎?個createCriteria對兩列排序合併
基於片段,我想你已經完成了所有的映射。您也將有類似這樣的片段標準:
var criteria = session
.CreateCriteria<OrderItem>() // class with properties quantity, price ...
.AddOrder(?) // how to append the order
;
var list = criteria.List<OrderItem>(); // Sorted list of OrderItems
唯一缺少點是OrderBy
。由於NHibernate的可擴展性,我們可以創建自己的Order
對象,並建立Criteria
的時候,我們可以調用.AddOrder(CustomOrder...)
下面是代碼:
public class CustomOrder : Order
{
public CustomOrder(string propertyName, bool ascending)
: base(propertyName, ascending) { }
public override SqlString ToSqlString(ICriteria criteria
, ICriteriaQuery criteriaQuery)
{
var sqlString = new SqlString(propertyName);
return sqlString.Append(this.ascending ? " asc" : " desc");
}
}
所以,現在我們可以把它放在一起:
var criteria = session
.CreateCriteria<OrderItem>()
.AddOrder(new CustomOrder("(quantity * price)", false)
;
var list = criteria.List<OrderItem>(); // Sorted list of OrderItems
完美的作品! – stefan
很高興聽到! NHiberante祝你好運;) –