使用 Criteria API 从 NHibernate 获取不同的结果集?

2024-03-13

我试图使用 NHibernate 中的 Criteria API 获得不同的结果。我知道使用 HQL 可以做到这一点,但我更喜欢使用 Criteria API 来执行此操作,因为我的应用程序的其余部分仅使用此方法编写。我找到这个论坛帖子 http://forum.hibernate.org/viewtopic.php?t=941669,,但一直无法让它发挥作用。有没有办法使用标准 API 来获取不同的结果集?

编辑:在执行此操作时,我还想排除主键列(这也是一个标识),并获取剩余的不同记录。有没有办法做到这一点?事实上,不同的记录返回重复项,因为每行的主键都是唯一的,但所有其他字段都是相同的。


要执行不同的查询,您可以将条件上的投影设置为 Projections.Distinct。然后包含您希望返回的列。然后,通过将结果转换器设置为 AliasToBeanResultTransformer - 传入结果应转换为的类型,将结果转回强类型对象。在此示例中,我使用与实体本身相同的类型,但您可以专门为此查询创建另一个类。

ICriteria criteria = session.CreateCriteria(typeof(Person));
criteria.SetProjection(
    Projections.Distinct(Projections.ProjectionList()
        .Add(Projections.Alias(Projections.Property("FirstName"), "FirstName"))
        .Add(Projections.Alias(Projections.Property("LastName"), "LastName"))));

criteria.SetResultTransformer(
    new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Person)));

IList<Person> people = criteria.List<Person>();

这将创建类似于以下内容的 SQL(至少在 SQL Server 中):

SELECT DISTINCT FirstName, LastName from Person

请注意,只有您在投影中指定的属性才会填充到结果中。

这种方法的优点是过滤是在数据库中执行的,而不是将所有结果返回到应用程序然后再进行过滤——这是 DistinctRootEntityTransformer 的行为。

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

使用 Criteria API 从 NHibernate 获取不同的结果集? 的相关文章

随机推荐

  • 删除视频缩略图上的黑条

    我有一个画廊 用户可以在其中提交视频的 Youtube 链接 服务器会自动从 Youtube 获取缩略图 然而 许多视频的图像顶部和底部都包含黑条 我知道黑条的起源 但当我将缩略图大小调整为正方形时 黑条会干扰设计 我尝试从上到下分析像素颜
  • 缺少 mcrypt 扩展名。请检查您的 PHP 配置

    我刚刚按照位于的教程进行操作https www digitalocean com community articles how to install linux apache mysql php lamp stack on ubuntu h
  • 完全隐藏 Chart.js 中的空条

    In my Chart js 条形图 每个标签大约有 6 个数据集 其中一些数据集的值为 0 这会导致 x 轴上出现空白 请参阅 我想删除这些空白 我该怎么做 从数据库呈现我的代码后 它看起来像这样 请注意 为了简单起见 我大大减少了代码
  • 如何将系统分解为模块?

    模块化 的有效性取决于将系统划分为模块所使用的标准 我想要的是 提出一些可用于将系统分解为模块的标准 Cohesion http en wikipedia org wiki Cohesion computer science 模块中的功能是
  • 如何在 Dragover/dragenter HTML 5 拖放过程中更改图标

    如何在 Dragover 或 Dragenter 过程中更改 DnD 拖放 图标 有可能吗 如果拖放源位于 html 页面内部 例如将一个 div 拖到另一个 div 中 我可以在拖拽启动期间更改图标 这是我的代码 我正在使用角度 我已经设
  • 在 if 语句中展开多个选项

    我想在一个 if 语句中解开两个选项 但编译器抱怨密码常量运算符后的预期表达式 可能是什么原因 if let email self emailField text let password self passwordField text d
  • 如何强制 Google Charts vAxes 渲染?

    目前 我在页面上渲染两个图表 我正在使用谷歌的可视化图表库 由于页面大小问题 vAxes 在某些 大部分时间拒绝渲染 如果我给它足够的空间 它就会很好地渲染轴 但如果它稍微偏离 即使有足够的空间容纳这些该死的轴 它们也会拒绝渲染 我不能这样
  • Windows Phone IE 移动 bug 具有透明背景图像和底部绝对定位

    我在使用 WP IE 时遇到两个问题 透明背景图像的透明边框上有伪影 绝对定位的 div 到页面底部在浏览器导航栏和页面底部之间留下约 5px 的白色间隙 请注意 我使用 div 而不是 img 来处理CSS 视网膜图像替换 http co
  • 透明状态栏不适用于 windowTranslucentNavigation="false"

    我正在开发一个Activity我需要在运行 5 0 API 21 的设备上使导航栏不透明 并使状态栏透明 下面是我使用的样式 以及对我的问题的解释 AppTheme延伸Theme AppCompat Light NoActionBar
  • 从非托管 C 调用托管代码

    因此 经过大约一天半的时间 我的进展为零 我需要用 C 语言编写一个 DLL 用作现有应用程序的插件 DLL 必须由 Visual Studio 2008 编译器使用以下选项进行编译 cl DNT40 DPOMDLL DCRTAPI1 cd
  • MySQL 多 ID 查找

    我正在尝试向系统添加全文搜索 我想要编写的查询需要涉及多次查找 然后进行搜索 如果可能的话 我有一张教师表和一张科目表 teacherProfile teacherId int primary key subjectOneId int su
  • 读取时出现 Ruby CSV UTF8 编码错误

    这就是我正在做的 csv CSV open file name r 我用它来测试 line csv shift while not line nil puts line line csv shift end 我遇到了这个 ArgumentE
  • html中有vr(垂直规则)吗?

    我知道html中有hr 水平规则 但我不相信有vr 垂直规则 我错了吗 如果没有 为什么没有垂直规则 不 没有垂直规则 编辑 现在是 2021 年 我回答这个问题十二年后 我不再认为我原来的解释是正确的 原文解释 拥有一个没有逻辑意义 HT
  • 具有相同名称/路径的多个 cookie 的浏览器行为

    我对当存在多个具有相同名称和路径且对当前域有效的 cookie 时各种浏览器的行为感兴趣 例如 浏览器存储了这两个cookie key value path domain foo bar baz key value path domain
  • 为什么 svn import 选项无法检测文件重复

    如果我想签入 SVN 中已存在的同名文件 在这种情况下我将无法提交 例如 Name doc and name doc 但是 在这种情况下我将能够导入 这种情况甚至适用于文件夹名称 这可以防止将来进行结账操作 有没有办法防止文件或文件夹重复
  • 运行桌面版 libgdx 示例 gdx-invaders 时出现 java.lang.NoClassDefFoundError

    我正在构建 libgdx 的 gdx invaders 示例 有两个项目 gdx入侵者 基础项目 作为桌面 Java 应用程序运行gdx 入侵者 android项目 依赖于 gdx invaders 并作为 Android 应用程序运行 我
  • Golang反射:无法设置包装结构的接口字段

    我正在尝试实现一种方法 该方法可以更改可以具有任意结构的对象中的字段值 当我有指向结构的指针时 字段的遍历没有问题 但是 当我有一个接口不包装指向结构的指针而是包装结构本身时 我无法设法更改字段 简而言之 The following doe
  • 我什么时候必须声明 session_start(); ?

    所以我是 PHP 的初学者 所以我需要一些帮助 我正在尝试确定何时开始会议 我应该在用户首次注册时执行此操作还是在用户登录时执行此操作 另外 会话是否 通用 意味着当我检查会话时它会起作用还是我必须在所有页面中包含一个文件来检查某人是否有会
  • .NET 中的 DDD / 聚合

    我一直在阅读 Evans 关于 DDD 的书 并且正在思考应该如何在 NET 中实现聚合 目前 我只能想出一种方法 将聚合隔离在单独的类库中 然而 这似乎有点矫枉过正 我更愿意将所有域对象保留在一个库中 我想知道是否有不同的方法 1 lib
  • 使用 Criteria API 从 NHibernate 获取不同的结果集?

    我试图使用 NHibernate 中的 Criteria API 获得不同的结果 我知道使用 HQL 可以做到这一点 但我更喜欢使用 Criteria API 来执行此操作 因为我的应用程序的其余部分仅使用此方法编写 我找到这个论坛帖子 h