写查询以查找没有孩子的父母

时间:2013-03-18 18:12:24

标签: fluent-nhibernate

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

1 个答案:

答案 0 :(得分:1)

我想通了......我不得不使用&#34; IsEmpty&#34;而不是&#34; IsNull&#34;。

 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")
            ));