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

Can something like this be done in NHibernate?

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

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

  • SELECT (实体的所有映射列,或投影 - 仅特定列)
  • WHERE (任何类型的限制都可以,包括custom/DB特定的语句)
  • GROUP BY
  • ORDER BY
  • HAVING

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

关于JOIN:我们还可以决定加入什么(哪个映射参考)甚至加入输入 (左侧,内部...)。但是 ON 语句必须包含 NHibernate 生成的部分,来自映射。

所以,上面的陈述只是为了得到最后的陈述:

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

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

在此处阅读更多内容: