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 对两列组合进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中对两列进行透视和排序?

熊猫:对两列一起排序[重复]

在 Postgresql 中,对两列的组合强制唯一

在 Postgresql 中,对两列的组合强制唯一

在 QTableView 中使用 QSortFilterProxyModel 对两行进行排序

SQL Server:如何对两列/条件进行重复数据删除?