我可以在表达式转换中使用一些帮助。

我在类上有一个方法,如下所示:

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?

10-02 18:14