我使用存储库模式来包装NHibernate实体。其中一种方法是public IList<T> GetAll()
,它只返回该实体的所有项目。实现在Criteria或QueryOver中完成。
我想重载此方法以接受排序顺序,如下所示:public IList<T> GetAll(NHOrderFor<T> order)
我可以调用它并流利地定义顺序。这可能吗? QueryOver是首选但不是必需的。
我前进了一点。我将参数定义为Expression<Func<T,object>> path
,这是QueryOver.OrderBy()所期望的,但表达式缺少必须遵循的.Asc or .Desc
规范。
答案 0 :(得分:0)
您可以传入一个bool变量来确定它是asc还是desc - 唯一的&#34;棘手&#34;部分是.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>();
}