2012-04-01 80 views
2

我可以使用一些表达式转换的帮助。从表达式<Func <TypeIn,TypeOut1 >>转换为表达式<Func <TypeIn,TypeOut2 >>

我有一个类,它看起来像下面的方法:

这是一个仓库类的通用查询。我想保留泛型,所以我指定了TOrderBy参数,以便该属性的类型无关紧要。然而,这个实现的例子使用NHibernate和我试图做到以下几点:

var query = session.QueryOver<TEntity>().OrderBy(orderBy).Asc; 

然而,疗法的OrderBy方法需要表达的参数>,所以我得到一个编译错误,因为没有保证TOrderBy将是一个对象。

有没有办法做这种转换,或者我应该坚持使用对象而不是TOrderBy?如果我坚持使用对象,我是否丧失了通过ValueTypes(例如DateTime)进行排序的能力?

感谢您的任何帮助/建议。

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

+0

我可能是不正确的,但如果与TOrderBy有错误,你可以尝试添加约束,如“WhereTrderBy:class” – 2012-04-01 15:23:49

+0

我不想添加一个类的约束,因为那样你将无法使用事物如DateTime或int或其他值类型 – 2012-04-01 15:33:42

+0

您可以使用typeof(TOrderBy)在引用vs值类型上运行替代逻辑吗? – Rich 2012-04-04 16:53:31

回答

0

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

+0

是的有人向我指出,随着NH 3,Linq2NH被添加到它,所以我已经切换到这个特定的场景 – 2012-04-04 18:26:43

相关问题