从表达式转换<func <typein,typeout1 =“”>&gt;到表达式<func <typein,typeout2 =“”>&gt; </func <typein,> </func <typein,>

时间:2012-04-01 14:57:42

标签: c# linq nhibernate expression

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

我在类上有一个类似于以下内容的方法:

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实现中我遇到了这个问题

1 个答案:

答案 0 :(得分:0)

如果您使用LINQ和EF,为什么不使用LINQ和NHibernate而不是QueryOver?