【问题标题】:Can something like this be done in NHibernate?这样的事情可以在 NHibernate 中完成吗?
【发布时间】:2016-07-21 22:22:37
【问题描述】:

不确定如何在 Fluent NHibernate 中执行此操作(最好)Criteria

SELECT foo.One, foo.Two, bar.One
FROM Bar bar
RIGHT JOIN ( SELECT 
             One, Two 
             WHERE One LIKE '%number%'
             ORDER BY Id ASC
             OFFSET 0 ROWS 
             FETCH NEXT 25 ROWS ONLY 
           ) Foo
ON Bar.Foo_Id = Foo.Id
WHERE Bar.Two IN (...)

【问题讨论】:

  • 子查询中没有from子句?

标签: nhibernate fluent-nhibernate nhibernate-mapping nhibernate-criteria


【解决方案1】:

NHibernate criteria,代表一种用于在实体之上,即映射之上进行查询的语言。这意味着,我们(NHiernate 标准的用户)可以影响这些部分中的最终 SQL SELECT 语句:

  • SELECT (实体的所有映射列,或投影 - 只是特定列)
  • WHERE (可以使用任何类型的限制,包括自定义/数据库特定语句)
  • GROUP BY
  • ORDER BY
  • HAVING

事实上,我们查询实体 (即我们如何映射<class name="MyEntity" table="MyTable",我们只能影响FROM映射内部。

关于JOIN:我们还可以决定要加入什么(哪个映射引用)甚至加入类型(LEFT, INNER.. .)。但是ON 语句必须包含 NHibernate 生成的部分,来自映射。

因此,上述内容只是为了达到最终陈述:

如果我们想将 SELECT 作为 FROM/JOIN 的一部分...该 SELECT 必须映射为某个实体

<class name="MyEntity"... >
   <subselect>
    SELECT ...
    FROM ...
   </subselect>

在这里阅读更多:

NHibernate Criteria: Subquery After 'From' Clause

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多