2

我正在创建一个方法,该方法可以从我的抽象过滤器对象创建 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.Or 等)非常繁琐(该方法已生成,并且我有多个 or 语句必须以某种方式连接到一个表达式中)。有没有办法避免使用 Expression.Or() 并使用 LINQ 或 HQL 创建 ICrietrion / ICriteria?

4

3 回答 3

1

嘿,你检查过这个问题吗?它显示了从 Linq 到 NHibernate 再到 MultiCriteria(并在将 linq 查询转换为 ICriteria 的过程中)

于 2010-06-21T04:52:44.283 回答
0

除非您想使用 WHERE 子句在集合端而不是数据库端进行过滤,否则 Linq 不是最好的解决方案。Ayende 建议 ICriteria API 非常适合动态过滤器创建,我使用多个 OR 时遇到的问题已经通过使用 Restrictions.Disjunction()... NHibernate 中存在这样的东西 :)

于 2010-04-27T17:43:27.413 回答
0

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

于 2010-04-27T15:22:49.167 回答