NHibernate - 根据子属性过滤结果

2024-03-11

我有这段代码获取所有启用的组及其子组。我遇到的问题是,孩子们也可以被禁用,但我无法流畅地 nhibernate 只获取其中的组all儿童已启用。我认为这是可能的,但如何实现呢?

public class Group {
    public bool IsDisabled { get; set; }
    public string Description { get; set; }
    public ICollection<ChildType> Children { get; protected set; }
}

public class ChildType {
    public bool IsDisabled { get; set; }
    public string Description { get; set; }
}

public IList<Group> Search(string searchString) {
    IQueryOver<Group> query = Session.QueryOver<Group>()
        .WhereRestrictionOn(x => x.Description).IsInsensitiveLike(searchString, MatchMode.Start)
        .Where(x => !x.IsDisabled)
        .OrderBy(x => x.Description).Asc
        .Fetch(group => group.Children).Eager;

    return query
        .Cacheable()
        .List();
}

Edit:儿童和群体之间存在 N:M 关系。

以下是我使用的解决方案:

public class Group {
    public long Id { get; set; }
    public bool IsDisabled { get; set; }
    public string Description { get; set; }
    public ICollection<ChildType> Children { get; protected set; }
}

public class ChildType {
    public long Id { get; set; }
    public bool IsDisabled { get; set; }
    public string Description { get; set; }
    public ICollection<Group> Groups { get; protected set; }
}

public IList<Group> Search(string searchString) {
    ChildType child = null;
    Group group = null;
    Group joinedGroup = null;

    var notDisabled = Session.QueryOver.Of<ExaminationType>()
        .Where(x => x.IsDisabled)
        .JoinAlias(x => x.Groups, () => joinedGroup )
            .Where(x => joinedGroup == group)
        .Select(x => x.Id);

    IQueryOver<Group> query = Session.QueryOver<Group>()
        .WhereRestrictionOn(x => x.Description).IsInsensitiveLike(searchString, MatchMode.Start)
        .JoinAlias(x => x.ExaminationTypes, () => child)
        .WithSubquery.WhereNotExists(notDisabled)
        .OrderBy(x => x.Description).Asc;

    return query
        .Cacheable()
        .List();
}

您需要使用子查询才能实现您想要的。为了做到这一点,您需要添加对 ChildType 实体的 Group 引用。

Group group = null;
var childCrit = QueryOver.Of<ChildType>()
        .Where(c => c.Group == group).And(c => c.IsDisabled)
        .Select(c => c.Id);
var query = Session.QueryOver(() => group)
        .WhereRestrictionOn(x => x.Description).IsInsensitiveLike(searchString, MatchMode.Start)
        .Where(x => !x.IsDisabled)
        .WithSubquery.WhereNotExists(childCrit)
        .OrderBy(x => x.Description).Asc
        .Fetch(group => group.Children).Eager;

这将获得所有没有残疾并且没有残疾儿童的组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NHibernate - 根据子属性过滤结果 的相关文章

随机推荐

  • 将 MVC 与 JavaFx 一起应用

    我是 GUI 世界 OO 设计模式的新手 我想在我的 GUI 应用程序中使用 MVC 模式 我已经阅读了一些关于 MVC 模式的教程 模型将包含数据 视图将包含视觉元素和控制器将连接视图和模型 我有一个包含 ListView 节点的视图 并
  • std::is_constructible 在具有非公共析构函数的类型上

    预期结果是什么std is constructible http en cppreference com w cpp types is constructible在具有私有或受保护析构函数的类型上 例如 我仍然可以在堆上构造这样的对象 即使
  • 将文件从一个目录复制到另一个目录

    我对 C 很陌生 我正在尝试让我的程序将文件从一个位置复制到另一个位置 我的方法如下 private void CopyInstallFiles object sender EventArgs e string sourceFile F i
  • HTML 表单验证 - 基于单选按钮选择的条件[重复]

    这个问题在这里已经有答案了 我有一个 HTML 表单 并且正在使用 JQuery Validate 插件来要求某些表单字段为必填字段 我有一个带有 3 个选项的单选按钮字段 小时 天 不确定 另一个字段用于输入与小时或天选择相对应的数字 但
  • 使用 TextInputLayout 和 Spinner 的对齐问题

    我遇到了 TextInputLayout 和 Spinner 的对齐问题 我希望 Spinner 下划线与 TextInputLayout 内的 EditText 下划线对齐 这就是我正在做的
  • iPhone Storyboard 编辑表格视图

    我一直在尝试学习 Xcode 中的新 Storyboard 功能 并且在尝试将 UITableView 设置为编辑模式时遇到了问题 到目前为止 我的故事板如下所示 NavigationController gt UIViewControll
  • Airflow:如何扩展SubDagOperator?

    当我尝试扩展气流 API 中提供的 SubDagOperator 时 气流网络服务器 GUI 无法将其识别为 SubDagOperator 从而使我无法放大 subdag 如何扩展 SubDagOperator 同时保留将其放大为 subd
  • Rake 任务无法正确加载:环境

    我正在运行自定义 rake 任务 namespace import do desc Import terms of service as HTML from stdin task terms gt environment do html S
  • .net 命名空间问题

    我在我的 asp net 应用程序中创建了一个名为 Controls 的文件夹 该文件夹中包含用户控件 例如 1 是 DateRangePicker ascx 现在我正在我的应用程序代码文件夹中创建一个类 并且尝试将某些内容转换为 Date
  • eval 反序列化后 JavaScript 原型未定义

    尝试反序列化 JSON 数据并更新每个对象的原型并继承公共函数 但是 以下脚本会引发错误 people 0 getFullName 不是函数 反序列化对象的原型在赋值后似乎未定义
  • 动态创建对象的副本?

    我的应用程序将我的 Web 服务响应存储到 WeakHashMap 中 在我的应用程序中 我在 UI 中操作从 Web 服务返回的数据 并且由于对象被引用 因此它也会修改引用 在我的弱哈希图中 有没有一种方法可以将对象的副本而不是引用存储到
  • 用于制作自定义支付网关的 Shopify 插件

    我想在shopify中制作自定义支付网关 以便哪种编程语言适合制作插件 并给出一些如何继续进行的提示 为了制作支付网关插件 我们必须使用公共应用程序还是私人应用程序 由于 Shopify 应用程序通过 REST 集成 因此您熟悉的任何应用程
  • jQuery Mobile 弹出窗口和对话框

    jQuery mobile 1 2 alpha 引入了 Popups 同时它已经有一个类似的小部件 称为 Dialogs 它们本质上看起来非常相似 弹出窗口和对话框之间有哪些技术差异 弹出窗口可以做哪些 Dialogue 做不到的事情 最好
  • 如何在bash中将多行文件转换为带有换行符的字符串?

    如何将多行文件转换为字符串 nbash 中的字符 例如 我有一个需要在我的配置中配置的证书JSON文件 所以而不是有 BEGIN CERTIFICATE MIIDBjCCMIIDB MIIDBjCCMIIDB MIIDBjCCMIIDB E
  • 使用 DateTimeConverter 设置 中的日期格式

    我有一个
  • 如何将“if条件”转换为“switch”方法

    我该怎么写这个if condition in switch method if k pg id k pg tag k pg user result connection gt run query sql array to switch k
  • 如何在 Windows 上运行 ubuntu 容器?

    我是 Docker 新手 正在阅读入门文档 https docs docker com docker for windows explore the application and run examples https docs docke
  • 我怎样才能在多个输入字段上获取多个值?

    我有这样的输入框
  • 使用 PowerShell,如何让 Write-Debug 输出显示在控制台中?

    我正在学习 PowerShell 并正在使用写主机 https learn microsoft com en gb powershell module Microsoft PowerShell Utility Write Host检查新 P
  • NHibernate - 根据子属性过滤结果

    我有这段代码获取所有启用的组及其子组 我遇到的问题是 孩子们也可以被禁用 但我无法流畅地 nhibernate 只获取其中的组all儿童已启用 我认为这是可能的 但如何实现呢 public class Group public bool I