我正在创建一个方法,可以从我的抽象过滤器对象创建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?
答案 0 :(得分:1)
答案 1 :(得分:0)
不,这是不可能的。为什么不使用linq而不是标准?
答案 2 :(得分:0)
Linq不是最好的解决方案,除非你想使用WHERE子句在数据库端对集合端进行过滤。 Ayende建议ICriteria API非常适合动态过滤器创建,我使用Restrictions.Disjunction()解决了多个OR的问题... 当时我问的问题我只是没有意识到NHibernate中存在这样的事情:)