我可以使用表达式转换的一些帮助。
我在类上有一个类似于以下内容的方法:
protected IQueryOver<TEntity, TEntity> OrderQuery<TOrderBy>(
Expression<Func<TEntity, TOrderBy>> orderBy)
{
return session.QueryOver<TEntity>().OrderBy(orderBy).Asc;
}
这是存储库类的通用查询。我想保持通用,所以我指定了TOrderBy参数,以便属性的类型无关紧要。但是,这个实现示例使用的是NHibernate,我正在尝试执行以下操作:
var query = session.QueryOver<TEntity>().OrderBy(orderBy).Asc;
然而,OrderBy方法采用Expression&gt;的参数。因此我得到一个编译错误,因为无法保证TOrderBy会成为一个对象。
有没有办法进行这种转换,还是应该坚持使用对象而不是TOrderBy?如果我坚持使用对象,我是否不会失去通过ValueTypes(例如DateTime)订购的能力?
感谢您提供任何帮助/建议。
编辑:我应该提一下,我保留了这个通用,因为我将编写nhibernate和实体框架的实现。 EF中没有这个问题,因为它使用普通的Linq OrderBy方法。它只是在Nhibernate实现中我遇到了这个问题答案 0 :(得分:0)
如果您使用LINQ和EF,为什么不使用LINQ和NHibernate而不是QueryOver?