NH将ICriteria转换为QueryOver

时间:2011-08-31 16:13:21

标签: nhibernate

我想将这段代码转换为与QueryOver一起使用

       public IList<T> ListByCriteria( ICriteria criteria, int maxResult )
    {
        IList<T> ret = new List<T>();
        using (ITransaction tx = m_session.BeginTransaction(IsolationLevel.ReadCommitted))
        {
            try
            {
                ret = criteria
                    .SetMaxResults( maxResult )
                    .List<T>();

                tx.Commit();
            }
            finally
            {
                if (tx.IsActive)
                    tx.Rollback();
            }
        }
        return ret;
    }

类似

    public IList<T> ListByQueryOver( Expression<Func<bool>> expression )
    {
        IList<T> ret = new List<T>();
        using (ITransaction tx = m_session.BeginTransaction(IsolationLevel.ReadCommitted))
        {
            try
            {
                ret = m_session.QueryOver<T>().Where( expression )
                    .List<T>();

                tx.Commit();
            }
            finally
            {
                if (tx.IsActive)
                    tx.Rollback();
            }
        }
        return ret;            
    }

但它没有编译。 错误消息指出:“T必须是引用类型才能在QueryOver上将其用作参数'T'”

是否可以将此调用设为通用?

怎么了?

谢谢你,Stefano

1 个答案:

答案 0 :(得分:1)

尝试:

public IList<T> ListByQueryOver( Expression<Func<T, bool>> expression ) where T : class, new()

where子句将T限制为引用类型,而new需要类上没有参数的构造函数。 QueryOver Where方法需要`Expression&gt;'参数。