是否可以从LINQ或HQL创建ICriteria / ICriterion?

时间:2010-04-27 15:09:20

标签: linq nhibernate hql icriteria

我正在创建一个方法,可以从我的抽象过滤器对象创建NHibernate理解的过滤器(通过过滤器,我的意思是一组ICriteria对象)。

public static IEnumerable<ICriterion> ToNhCriteria(this MyCriteria criteria)
{
   // T4 generated function
   // lots of result.Add(Expression.Or(Expression.Eq(),Expression.Eq)) expression trees - hard to generate
   // Is there a way to generate HQL/Linq query here istead?
}

然后我想做像

这样的事情
session.CreateCriteria<Entity>().Add(myCriteria.ToNhCriteria())

过滤实体。 问题是使用Expression。方法(Expression.Or等)非常繁琐(生成方法,我有多个或语句必须以某种方式连接到表达式)。 有没有办法避免使用Expression.Or()并使用LINQ或HQL创建ICrietrion / ICriteria?

3 个答案:

答案 0 :(得分:1)

嘿,你看过this问题了吗?它显示从Linq到NHibernate再到MultiCriteria(并且在路上将linq查询转换为ICriteria)

答案 1 :(得分:0)

不,这是不可能的。为什么不使用linq而不是标准?

答案 2 :(得分:0)

Linq不是最好的解决方案,除非你想使用WHERE子句在数据库端对集合端进行过滤。 Ayende建议ICriteria API非常适合动态过滤器创建,我使用Restrictions.Disjunction()解决了多个OR的问题... 当时我问的问题我只是没有意识到NHibernate中存在这样的事情:)