5

NHibernate を使用して、クライテリア API でデータベースにクエリを実行しています。私の基準は以下です。

ICriteria c = Session.CreateCriteria(typeof(Transaction));

ProjectionList projections = Projections.ProjectionList();
projections.Add(Projections.Sum("Units"), "Units");
projections.Add(Projections.GroupProperty("Account"), "Account");
projections.Add(Projections.GroupProperty("Security"), "Security");
c.SetProjection(projections);

これは正常に機能していますが、「Units」プロパティが> 0の場合にのみクエリを返すように制限できる方法が必要です.SQLでは、単にHaving Units > 0句を使用しますが、見つけることができませんでしたNHibernate でこれを行う方法。誰にもアイデアがありますか、それとも HQL を使用する唯一のオプションですか?

4

2 に答える 2

5

Criteria オブジェクトから ProjectionCriteria にアクセスできます。

...
c.SetProjection(projections)
.ProjectionCriteria
.Add(Restrictions.Ge("Units", 0));

編集: このソリューションは現在機能しませんが、NHibernate 2.1.0 では機能するはずです

于 2009-03-12T01:00:10.307 に答える
3

同様の問題でここに立ち寄る人は誰でも、私はこの方法で解決しました:

IProjection howMany = Projections.Count("Id").As("HowMany");

ICriteria criteria = session
    .CreateCriteria<L10N>()
    .SetProjection(
        howMany,
        Projections.GroupProperty("Native"),
        Projections.GroupProperty("Locale")
    );

criteria.Add(Restrictions.Gt(howMany,1));
于 2010-09-21T13:00:54.150 に答える