两个列组合的CreateCriteria排序

时间:2013-05-30 20:48:51

标签: nhibernate sorting fluent-nhibernate createcriteria

SELECT [quantity ]
      ,[price]
FROM [dbo].[orderItem]
ORDER BY (quantity  * price) DESC

如何编写CreateCriteria以生成SQL,如上例所示?

1 个答案:

答案 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
相关问题