与 NHibernate 和 Criteria 联合?

发布于 2024-12-22 08:13:52 字数 104 浏览 2 评论 0原文

与 NHibernate 和 Criteria 的联合:

在 Criteria 或 QueryOver 中可能吗? 如果没有,是否有其他方法可以在同一查询中实现两个结果的并集?

Union with NHibernate and Criteria:

Is it possible in Criteria or QueryOver?
If not, is there any other way to achieve a union of two result within the same query?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我做我的改变 2024-12-29 08:13:52

您不能直接执行联合,但可以执行两个将来的查询并在代码中联合结果:

var resultSet1 = this.Session.CreateCriteria<A>().Future<A>();
var resultSet2 = this.Session.CreateCriteria<B>().Future<B>();

此后,当枚举任一结果集时,NHibernate 将向数据库发出单个查询,该查询将返回多个结果集。请注意,如果您不使用 SQL Server,数据库可能不支持多个结果集。

You can't do a union directly, but you can do two future queries and union the results in code:

var resultSet1 = this.Session.CreateCriteria<A>().Future<A>();
var resultSet2 = this.Session.CreateCriteria<B>().Future<B>();

After this, when either result set is enumerated, NHibernate will issue a single query to the database which will return multiple result sets. Note, if you are not using SQL Server, the database may not support multiple result sets.

画▽骨i 2024-12-29 08:13:52

即使使用 HQL,这也是不可能的。请参阅另一篇帖子

一方法是回到原始 SQL 并使用命名查询

<sql-query name="MyQuery">
<![CDATA[
select col1,col2 from table1
union
select col1,colA from table2
]]>
</sql-query>

并使用 AliasToBeanResultTransformer 将其转换回 DTO/POCO

var query = Session
  .GetNamedQuery("MyQuery")
  .SetResultTransformer(new AliasToBeanResultTransformer(typeof(MyDto)));
  return query.List<MyDto>();

This is not possible even using HQL. See this other S.O. post

One way is to drop back to raw SQL and use a named query

<sql-query name="MyQuery">
<![CDATA[
select col1,col2 from table1
union
select col1,colA from table2
]]>
</sql-query>

And use the AliasToBeanResultTransformer to transform it back into your DTO/POCO

var query = Session
  .GetNamedQuery("MyQuery")
  .SetResultTransformer(new AliasToBeanResultTransformer(typeof(MyDto)));
  return query.List<MyDto>();
2024-12-29 08:13:52

使用 -作为您的条件。

NHibernate.Criterion.Restrictions.Or(ICriterion FirstQuery,
                                     ICriterion SecondQuery)

您可以在单个查询中

You can use -

NHibernate.Criterion.Restrictions.Or(ICriterion FirstQuery,
                                     ICriterion SecondQuery)

as your Criteria in a single query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文