SELECT [quantity ]
,[price]
FROM [dbo].[orderItem]
ORDER BY (quantity * price) DESC
如何编写CreateCriteria以生成SQL,如上例所示?
答案 0 :(得分:0)
基于片段,我想,你已经完成了所有的映射。您还可以使用与此代码段相似的条件:
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