1

患者の記録に機器の履歴の記録がある/ないという状況があります。機器レコードを持たないすべての患者レコード、またはnullではないフィールドを持つ機器レコードを持つすべての患者を検索する必要があります。以下でクエリを実行する方法は機能しません。設備歴のない患者さんは全くいません。助言がありますか?レコードに直接アクセスしたり、更新したりできるため、マッピングは正しいです。40,000を超えるレコードで構成されるデータベースがあるため、すべての患者を引き戻して子のカウントを行うことはできません。速度が遅く、メモリを使いすぎます。

どんな助けでも大歓迎です。前もって感謝します。

public IList<Patients> GetAllPatientsWithoutDevice(int facilityID, string search)
    {
        ICriteria query = FluentSessionManager.GetSession()
            .CreateCriteria<Patients>()
            .Add(Expression.Eq("IsDeleted", false))
            .CreateAlias("Facilities", "f")
            .Add(Expression.Eq("f.ID", facilityID))
            .CreateAlias("EquipmentHistory", "eh") // Tried, inner, left and right joins...
            .Add(Expression.Or(
                Expression.IsNull("EquipmentHistory"),
                Expression.IsNotNull("eh.DateOffPatient")
            ));

        query.AddOrder(new Order("FirstName", true))
            .AddOrder(new Order("LastName", true));

        return query.List<Patients>();
    }
4

1 に答える 1

1

私はそれを理解しました...「IsNull」の代わりに「IsEmpty」を使用する必要がありました。

 ICriteria query = FluentSessionManager.GetSession()
            .CreateCriteria<Patients>()
            .Add(Expression.Eq("IsDeleted", false))
            .CreateAlias("Facilities", "f")
            .Add(Expression.Eq("f.ID", facilityID))
            .CreateAlias("EquipmentHistory", "eh", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
            .Add(Expression.Or(
                Expression.IsEmpty("EquipmentHistory"),
                Expression.IsNotNull("eh.DateOffPatient")
            ));
于 2013-03-18T18:24:53.373 に答える