我可以在表达式转换中使用一些帮助。
我在类上有一个方法,如下所示:
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>的参数,因此由于无法保证TOrderBy将成为对象,因此出现编译错误。
有没有办法进行这种转换,还是我应该坚持使用对象而不是TOrderBy?如果我坚持使用对象,是否不会失去按ValueTypes(例如DateTime)进行排序的能力?
感谢您的帮助/建议。
编辑:我应该提一下,我将保持这种通用性,因为我将为nhibernate和实体框架编写实现。 EF中没有此问题,因为它使用常规的Linq OrderBy方法。只是在Nhibernate实现中,我遇到了这个问题
最佳答案
如果您将LINQ与EF一起使用,为什么不将LINQ与NHibernate一起使用而不是QueryOver?