【问题标题】:NHibernate criteria to query parent objects with at least one child object?NHibernate 标准来查询具有至少一个子对象的父对象?
【发布时间】:2023-03-17 05:10:01
【问题描述】:

在我的项目中,Lines 可以分组,Group 的类型可以是 Crossing (1) 或 Parallel (2)。我需要找到至少具有一组指定类型(在本例中为 1)的所有行。给定行的 ID 可以位于组的 LineALineB 列上。这是我到目前为止的地方:

Criteria crit = session.CreateCriteria(typeof(Line), "ln");

DetachedCriteria count = DetachedCriteria.For<Group>()
.SetProjection(Projections.CountDistinct("Id"))
.Add(Expression.Or(
    Expression.EqProperty("LineA", "ln.Id"),
    Expression.EqProperty("LineB", "ln.Id")))
.Add(Expression.Eq("GroupTypeId", 1));

crit.Add(Subqueries.Gt(0, count));

【问题讨论】:

  • 您的查询看起来不错。您是否正在寻找更好的方法来执行此操作,或者您的查询无法正常工作?
  • 它不起作用。引发异常,但我不记得该消息。我得到了它的工作,并将发布答案
  • 您应该花时间检查您收到的异常情况并将其与您的问题一起发布。

标签: nhibernate criteria subquery correlated-subquery


【解决方案1】:

我搞定了!

crit.Add(Expression.Sql(
  "EXISTS(select 1 from Group" +
  "WHERE ({alias}.Id=LineA OR {alias}.Id=LineB)"+
    "AND GroupTypeId = ?)", (int) type, NHibernateUtil.Int32));

{alias} 是被查询对象的占位符。

【讨论】:

  • 虽然不是真的使用 Criteria。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 2014-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
相关资源
最近更新 更多