【问题标题】:How do I select a Random Row using NHibernate's ICriteria API?如何使用 NHibernate 的 ICriteria API 选择随机行?
【发布时间】:2009-04-08 12:15:18
【问题描述】:

我可以使用 NHibernate 的 ICriteria API 选择随机行吗?

【问题讨论】:

    标签: nhibernate random icriteria


    【解决方案1】:

    正如 cundh2o 所说,它是特定于 DBMS 的。但是您可以继承 Order 类并定义您自己的自定义排序。例如,对于 SQL Server:

    public class RandomOrder: Order {
        public RandomOrder() : base("", true) {}
        public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) {
            return new SqlString("newid()");
        }
    }
    

    【讨论】:

    • 2.1.2 兼容:public override SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery) { return new SqlString("newid()"); }
    • 不过,像这样使用 Newid 会导致中型到大型表的性能很差。
    【解决方案2】:

    如果您不限于使用 ICriteria,我可能会建议您使用 HQL 而不是选择随机行,因为它可以为使用您的数据库提供商提供的 Random 函数提供更大的灵活性。

    IQuery q = NHibernateSession.CreateQuery("your hql statement here")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多