从表达式转换<;Func<;TypeIn、TypeOut1>>;到表达式<;Func<;Type

本文关键字:lt gt Func 表达式 Type TypeOut1 TypeIn 转换 | 更新日期: 2023-09-27 18:29:37

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

我在一个类上有一个方法,它看起来如下:

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是一个对象。

有没有一种方法可以进行这种转换,或者我应该坚持使用object而不是TOrderBy?如果我坚持使用对象,我不会失去按ValueTypes(例如DateTime)排序的能力吗?

感谢您的帮助/建议。

编辑:我应该提到的是,我保留了这个通用性,因为我将为nhibernate和实体框架编写实现。EF中没有这个问题,因为它使用了普通的LinqOrderBy方法。只是在Nhibernate实现中,我遇到了这个问题

从表达式转换<;Func<;TypeIn、TypeOut1>>;到表达式<;Func<;Type

如果您将LINQ与EF一起使用,为什么不将LINQ也与NHibernate一起使用而不是QueryOver呢?