可以在NHibernate中完成这样的事情吗?

时间:2016-07-21 22:22:37

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

不确定如何在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 (...)

1 个答案:

答案 0 :(得分:0)

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

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

事实上,我们查询实体 (即我们如何映射<class name="MyEntity" table="MyTable",我们可以影响 FROM < / strong>仅在映射内部。

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

所以,上述内容只是为了达到最终陈述:

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

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

在这里阅读更多内容:

NHibernate Criteria: Subquery After 'From' Clause