Fluent nhibernate 编写查询以查找没有子级的父级

Fluent nhibernate 编写查询以查找没有子级的父级,fluent-nhibernate,Fluent Nhibernate,我的情况是,患者记录将/不会有设备历史记录。我需要查找所有没有设备记录的患者记录,或者所有设备记录字段不为空的患者。我下面查询的方式不起作用。我没有发现任何没有设备史的病人。有什么建议吗?映射是正确的,因为我可以直接访问记录、更新等。因为我有一个由40000多条记录组成的数据库,所以我无法撤回所有患者并进行子计数。这将是缓慢的,并使用太多的内存 任何帮助都将不胜感激。提前谢谢 public IList<Patients> GetAllPatientsWithoutDevice(int

我的情况是,患者记录将/不会有设备历史记录。我需要查找所有没有设备记录的患者记录,或者所有设备记录字段不为空的患者。我下面查询的方式不起作用。我没有发现任何没有设备史的病人。有什么建议吗?映射是正确的,因为我可以直接访问记录、更新等。因为我有一个由40000多条记录组成的数据库,所以我无法撤回所有患者并进行子计数。这将是缓慢的,并使用太多的内存

任何帮助都将不胜感激。提前谢谢

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>();
    }
public IList GetAllPatientsWithout设备(int-facilityID,字符串搜索)
{
ICriteria query=FluentSessionManager.GetSession()
.CreateCriteria()
.Add(表达式.Eq(“IsDeleted”,false))
.CreateAlias(“贷款”、“f”)
.Add(表达式Eq(“f.ID”,facilityID))
.CreateAlias(“EquipmentHistory”,“eh”)//尝试、内部、左侧和右侧联接。。。
.添加(表达式)或(
表达式.IsNull(“设备历史”),
表达式.IsNotNull(“eh.DateOffPatient”)
));
query.AddOrder(新订单(“FirstName”,true))
.AddOrder(新订单(“LastName”,true));
返回query.List();
}

我想出来了。。。我不得不用“IsEmpty”而不是“IsNull”

ICriteria query=FluentSessionManager.GetSession() .CreateCriteria() .Add(表达式.Eq(“IsDeleted”,false)) .CreateAlias(“贷款”、“f”) .Add(表达式Eq(“f.ID”,facilityID)) .CreateAlias(“EquipmentHistory”、“eh”、NHibernate.SqlCommand.JoinType.LeftOuterJoin) .添加(表达式)或( 表达式.IsEmpty(“设备历史”), 表达式.IsNotNull(“eh.DateOffPatient”) ));
我想出来了。。。我不得不用“IsEmpty”而不是“IsNull”

ICriteria query=FluentSessionManager.GetSession() .CreateCriteria() .Add(表达式.Eq(“IsDeleted”,false)) .CreateAlias(“贷款”、“f”) .Add(表达式Eq(“f.ID”,facilityID)) .CreateAlias(“EquipmentHistory”、“eh”、NHibernate.SqlCommand.JoinType.LeftOuterJoin) .添加(表达式)或( 表达式.IsEmpty(“设备历史”), 表达式.IsNotNull(“eh.DateOffPatient”) ));
 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")
            ));