NHibernate - 左连接

2024-04-15

我有以下两个表:

JobsAreaID、JobNo(复合键)

Logs日志ID、区域ID、作业编号

我需要获取所有没有与之关联的日志的作业。在 SQL 中我可以这样做:

SELECT Jobs.AreaID,
       Jobs.JobNo
FROM   Jobs
       LEFT JOIN Logs
           ON Jobs.AreaID = Logs.AreaID
           AND Jobs.JobNo = Logs.JobNo
WHERE  Logs.LogID is null

但我不确定如何使用 NHibernate 来实现这一点。有人可以提供任何指点吗?

这是我的映射:

<class name="Job" table="Jobs">
    <composite-key name="Id">
        <key-property name="JobNo"/>
        <key-many-to-one name="Area" class="Area" column="AreaID"/>
    </composite-key>
</class>

<class name="Log" table="Logs">
    <id name="Id" column="LogID">
        <generator class="identity"/>
    </id>
    <property name="JobNo"/>
    <many-to-one name="Area" class="Area" column="AreaID"/>
</class>

Thanks

Update

好的,我稍微修改了诺西拉的答案,现在这就是我想要的:

Log logs = null;

return session.QueryOver<Job>()
    .Left.JoinAlias(x => x.Logs, () => logs)
    .Where(x => logs.Id == null)
    .List<Job>();

我还必须将其添加到我的工作映射中:

<bag name="Logs">
    <key>
        <column name="JobNo"></column>
        <column name="DivisionID"></column>
    </key>
    <one-to-many class="Log"/>
</bag>

谢谢您的帮助。 :)


我不熟悉复合标识符,因为我不使用它们,所以据我所知 NHibernate 会自动创建正确的左连接。尽管如此,下面的(未经测试的)查询应该可以帮助您入门。

Job jobAlias = null;
Log logAlias = null;
YourDto yourDto = null;

session.QueryOver<Job>()
    // Here is where we set what columns we want to project (e.g. select)
    .SelectList(x => x
        .Select(x => x.AreaID).WithAlias(() => jobAlias.AreaID)
        .Select(x => x.JobNo).WithAlias(() => jobAlias.JobNo)
    )
    .Left.JoinAlias(x => x.Logs, () => logAlias, x.JobNo == logAlias.JobNo)
    .Where(() => logAlias.LogID == null)
    // This is where NHibernate will transform what you have in your `SelectList()` to a list of objects
    .TransformUsing(Transformers.AliasToBean<YourDto>())
    .List<YourDto>();

public class YourDto
{
    public int AreaID { get; set; }
    public int JobNo { get; set; }
}

注意:您需要 NHibernate 3.2 才能设置连接条件。

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

NHibernate - 左连接 的相关文章

随机推荐

  • 通过浏览器使用 PDO 将 MySQL 表中的数据存储为 CSV

    我有一个将数据写入 MySQL 数据库的表单 我希望用户能够下载他们的数据CSV最终提交后的格式 我的代码当前正在将数据库的内容转储到浏览器中 即它被写入页面 而不是写入 csv 文件 我想将他们发送到一个链接并提供下载文件的选项 这是我当
  • 从互联网读取数据

    我在网络服务器上有一个包含数据的远程文件夹 我使用以下方式访问数据 myData lt read table http myData csv sep header T 有没有办法对远程文件夹进行密码保护并在上述命令中输入授权 Thx 你可以
  • 使用不受支持的 WebKit 属性会产生什么影响?

    我有兴趣使用 webkit line clamp在混合 iOS 应用程序中 我已阅读苹果文档 https developer apple com library safari documentation AppleApplications
  • 合并时忽略文件/文件夹

    我目前正在使用 SVN 对我的软件项目进行版本控制 在一个正在进行的项目中 我有用于客户通用功能和规范的主干 以及用于客户特定功能和规范的分支 有什么方法可以标记一些文件 文件夹 这些文件 文件夹不应在每次执行此类操作时合并到分支中 我没有
  • Python 在调用之前修饰函数

    我有一个由其他人编写的相当复杂的装饰器 我想做的是根据决定一次调用该函数的修饰版本 或者另一次调用原始函数 未修饰 这可能吗 With decorator original function Without original functio
  • 如果输入等于字符串,则执行某些操作... python 2.7 [重复]

    这个问题在这里已经有答案了 使用以下代码时遇到问题 start over 1 question input Do you wish to try again y n if question y start over 1 else raise
  • 如何使用 xsmtp-api 和 php 库向 SendGrid 中的电子邮件主题添加替换标签

    我正在尝试在电子邮件的主题中设置我的客户的姓名 这对我的申请非常重要 从我在SendGrid API 文档 http sendgrid com docs API Reference SMTP API substitution tags ht
  • 将 JComboBox 放入 JTable 中

    我想将单独的 JComboBox 放入 JTable 的每个单元格中 IE 每个单元格的 JComboBox 内容都不相同 我基本上希望能够调用以下代码来将一行 JComboBox 添加到 JTable 中 有人有什么想法吗 谢谢 JCom
  • 如何在移动滑块时锁定页面滚动

    在 Flutter 中 我有一个应用程序 在自定义 ListView 小部件内有一个自定义滑块 唯一的问题是 当您移动滑块手柄 从左到右 时 由于 ListView 页面仍然会滚动 向上和向下 而我需要页面锁定到位 直到用户停止移动滑块 我
  • 读取 NTFS 格式的 MFT

    在网上寻找如何读 写 MFT 的解释时 我发现了以下部分 http www installsetupconfig com win32programming 1996 20AppE apnilife pdf http www installs
  • 将 nl2br 与 html 标签一起使用

    I use nl2br当显示保存在某处的一些信息时 但是当使用 HTML 标签时我不想添加 br 他们的标签 例如 如果我使用 table th th table 它将被转换为 table br th th br table br 这为这张
  • n 层架构 - BLL、DAL 和接口。什么是最佳实践?

    我有一个关于 n 层架构的问题 在问这个问题之前 我想了很久 因为这里已经有很多类似的问题了 但是 在看了一天半并阅读了其他答案之后 我仍然不确定 各种看似相似的术语和不同的方法让我感到困惑 如果我在不同的类库中有一个 BLL 和一个 DA
  • 购物车 API V3:无法为具有选项的产品创建购物车

    当我创建一个包含没有选项的产品的购物车时 一切正常 但如果任何产品有产品选项 则它不起作用 这里我得到了产品选项 它有一个 id 21 的选项 当我在创建 API 时使用此选项 id 时 它不起作用 如果您要将产品添加到购物车 并且该产品具
  • 将 celery 任务结果链接到通讯组中

    Like in 这另一个问题 https stackoverflow com questions 13271056 how to chain a celery task that returns a list into a group 我想
  • 绘制别名、像素完美的 1px 样条线(特别是 Catmull-Rom)

    简要背景 我正在开发一个基于 Web 的绘图应用程序 需要绘制穿过其控制点的 1px 粗样条线 我正在努力解决的问题是我需要绘制 p1 和 p2 之间的每个像素 就像我使用 1px 铅笔工具一样 因此 没有抗锯齿功能 一次一个像素 这需要手
  • MySQL 如何使用 INTO OUTFILE 追加到文件?

    我有以下代码 SELECT INTO OUTFILE TestInput Results csv FIELDS TERMINATED BY LINES TERMINATED BY n FROM Results 期望的结果是不断附加到 Res
  • 将二叉树转换为排序数组

    有没有一种方法可以将二进制转换为排序数组 而不必遍历树来查找每个数组索引 Node root Node runner int current smallest void findsmallest Node root Pre order tr
  • 使用 Python 从 AWS Lambda 连接到 DocumentDB

    我正在尝试从 Lambda 函数连接到 DocumentDB 我已经按照此配置了我的 DocumentDBtutorial https aws amazon com getting started hands on getting star
  • 如何让Mermaid中指定的节点水平对齐?

    这是我的流程图 graph TB aaa gt bbb gt ddd ccc ddd gt fff ccc gt eee fff fff gt hhh ggg kkk hhh gt iii mmm ggg kkk gt mmm 但实际上我想
  • NHibernate - 左连接

    我有以下两个表 JobsAreaID JobNo 复合键 Logs日志ID 区域ID 作业编号 我需要获取所有没有与之关联的日志的作业 在 SQL 中我可以这样做 SELECT Jobs AreaID Jobs JobNo FROM Job