我正在创建一个方法,它可以从我抽象的filter对象创建NHibernate能够理解的filter (例如,filter,我指的是一组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.Or等)相当繁琐(方法是生成的,并且我有多个or语句必须以某种方式连接到一个表达式中)。有没有办法避免使用Expression.Or()而使用LINQ或HQL创建ICrietrion / ICriteria?
发布于 2010-06-21 12:52:44
嘿,你看过this问题了吗?它展示了从Linq到NHibernate再到MultiCriteria (同时将linq查询转换为ICriteria)
发布于 2010-04-27 23:22:49
不,那不可能。为什么不使用linq而不是criteria呢?
发布于 2010-04-28 01:43:27
Linq不是最好的解决方案,除非您想在集合端而不是数据库端使用WHERE子句进行过滤。Ayende建议ICriteria API非常适合动态过滤器创建,我使用Restrictions.Disjunction()解决了多个for的问题……在我问这个问题的时候,这个问题简化了很多,我只是没有意识到NHibernate中存在这样的东西:)
https://stackoverflow.com/questions/2722360
复制相似问题