1

我有一种情况,患者记录将/不会有设备历史记录。我需要查找所有没有设备记录的患者记录或所有具有设备记录且字段不为空的患者。我在下面查询的方式不起作用。我找不到任何没有设备历史的患者。有什么建议么?映射是正确的,因为我可以直接访问记录、更新等。由于我有一个包含超过 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

我想通了......我不得不使用“IsEmpty”而不是“IsNull”。

 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 回答