1

関連付けられた機器で非アクティブな患者の総数を取得しようとしています。以下は、値 4 を返します。4 つの機器で非アクティブな患者が 1 人いるため、値 1 を返す必要があります。

return FluentSessionManager.GetSession()
            .CreateCriteria<Patients>()
            .CreateAlias("Locations", "l")
            .CreateAlias("l.Branches", "b")
            .CreateAlias("PatientsEquipment", "pe")
            .Add(Expression.Eq("b.ID", branchID))
            .Add(Expression.Eq("CurrentStatus", Enumerations.PatientStatus.Inactive))
            .Add(Expression.IsNull("pe.PickupDate"))
            .Add(Expression.Eq("pe.PickupRequestSent", false))
            .Add(Expression.Eq("pe.MaintenanceRequestSent", false))
            .SetResultTransformer(new DistinctRootEntityResultTransformer())
            .SetProjection(Projections.Count("ID")).UniqueResult<int>();

次のようにすると、正確なカウントを取得できます。

            ICriteria query = FluentSessionManager.GetSession()
            .CreateCriteria<Patients>()
            .CreateAlias("Locations", "l")
            .CreateAlias("l.Branches", "b")
            .CreateAlias("PatientsEquipment", "pe")
            .Add(Expression.Eq("b.ID", branchID))
            .Add(Expression.Eq("CurrentStatus", Enumerations.PatientStatus.Inactive))
            .Add(Expression.IsNull("pe.PickupDate"))
            .Add(Expression.Eq("pe.PickupRequestSent", false))
            .Add(Expression.Eq("pe.MaintenanceRequestSent", false))
            .SetResultTransformer(Transformers.DistinctRootEntity);

        IList<Patients> patients = query.List<Patients>();

        if (patients == null)
        {
            return 0;
        }

        return patients.Count();

完全なレコードセットを返してから数えることなく、正確な患者数を取得する方法はありますか?

前もって感謝します。

4

2 に答える 2

0

GroupProperty プロジェクションを追加できますか? お気に入りProjections.GroupProperty(Projections.Property<Patients>(x => x.Id))

于 2012-12-19T15:39:31.990 に答える
0

私は答えを見つけました....

 return FluentSessionManager.GetSession()
        .CreateCriteria<Patients>()
        .CreateAlias("Locations", "l")
        .CreateAlias("l.Branches", "b")
        .CreateAlias("PatientsEquipment", "pe")
        .Add(Expression.Eq("b.ID", branchID))
        .Add(Expression.Eq("CurrentStatus", Enumerations.PatientStatus.Inactive))
        .Add(Expression.IsNull("pe.PickupDate"))
        .Add(Expression.Eq("pe.PickupRequestSent", false))
        .Add(Expression.Eq("pe.MaintenanceRequestSent", false))
        .SetProjection(Projections.CountDistinct("ID")).UniqueResult<int>();

どうやら Projections.Count を使用していたとき、重複を含むすべてのレコードをカウントしていたようです。それを CountDistinct に変更すると、問題が解決しました。

于 2013-03-11T19:06:26.403 に答える