1

我正在使用存储库模式来包装 NHibernate 实体。其中一种方法是public IList<T> GetAll()简单地返回该实体的所有项目。实现是在 Criteria 或 QueryOver 中完成的。

我想重载这个方法来接受一个排序顺序,像这样:public IList<T> GetAll(NHOrderFor<T> order)我可以调用它并流畅地定义它的顺序。这可能吗?QueryOver 是首选但不是必需的。

更新

我领先了一点。我将参数定义为Expression<Func<T,object>> pathQueryOver.OrderBy() 所期望的参数,但表达式缺少.Asc or .Desc需要遵循的规范。

4

1 回答 1

0

您可以传入一个 bool 变量以确定它是 asc 还是 desc - 唯一“棘手”的部分是 .Asc 和 .Desc 是属性,因此您必须将它们分配给结果(您不需要做任何事情结果寿 - 它只返回相同的查询),例如:

public IList<T> GetAll(Expression<Func<T,object>> path, bool ascending) {
    if (ascending)
        queryOver = queryOver.OrderBy(path).Asc;
    else
        queryOver = queryOver.OrderBy(path).Desc;
    return queryOver.List<T>();
}
于 2012-06-13T07:14:54.343 回答