CreateCriteria 对两列组合进行排序
Posted
技术标签:
【中文标题】CreateCriteria 对两列组合进行排序【英文标题】:CreateCriteria sorting on two columns combined 【发布时间】:2013-05-30 20:48:50 【问题描述】:SELECT [quantity ]
,[price]
FROM [dbo].[orderItem]
ORDER BY (quantity * price) DESC
我应该如何编写一个 CreateCriteria 来像上面的例子一样生成 SQL?
【问题讨论】:
【参考方案1】:根据片段,我猜,你已经完成了所有的映射。你也会有类似于这个 sn-p 的标准:
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
【讨论】:
很高兴听到这个消息!祝 NHiberante 好运 ;)以上是关于CreateCriteria 对两列组合进行排序的主要内容,如果未能解决你的问题,请参考以下文章