3

昨日の朝からこのクエリと戦っていて、解決策が見つかりません。私がやりたいのは、次のようなクエリを作成することです。

IList<Parent> = _session.QueryOver<Parent>()
   .Where(Restrictions.lt(x => x.Childs.Count,4))
   .List<Parent>();

それを行う方法を知っている人はいますか?Childs は HasMany コレクションです。

よろしく、マーティン

4

1 に答える 1

2

サブクエリを使用してこれを行う方法の 1 つを次に示します。

Parent parentAlias = null;

IList<Parent> = _session.QueryOver<Parent>(() => parentAlias)
    .WithSubquery.WhereValue(4).Gt(
        QueryOver.Of<Child>()
            .Where(ch => ch.Parent.Id == parentAlias.Id)
            .Select(Projections.Count<Child>(ch => ch.Id)
        )
    .List<Parent>();

次のようなものが生成されます。

SELECT this_.Id
       /* select list continues */
FROM   [Parent] this_
WHERE  4 /* @p0 */ > (SELECT count(this_0_.Id) as y0_
              FROM   [Child] this_0_
              WHERE  this_0_.ParentId = this_.Id)
于 2013-07-05T12:03:46.563 に答える