对于不支持子查询的 NHibernate-to-LINQ 是不是有任何解决方法?

Posted

技术标签:

【中文标题】对于不支持子查询的 NHibernate-to-LINQ 是不是有任何解决方法?【英文标题】:Is there any work-around for NHibernate-to-LINQ not supporting subqueries?对于不支持子查询的 NHibernate-to-LINQ 是否有任何解决方法? 【发布时间】:2010-03-02 09:20:14 【问题描述】:

我知道 LINQ-to-NHibernate 目前不支持子查询 (http://ayende.com/Blog/archive/2009/07/26/nhibernate-linq-1.0-released.aspx)。

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

linq-to-nh 支持 where 子句中的子查询。这正是我需要的东西。我之前的回答错了。 martijnboland 和 Stefan Steinegger 都是对的。要了解如何在 linq-to-nh 中进行子查询,请参阅 this 和 this。还有limitations。

【讨论】:

【参考方案2】:

我认为解决方法只是使用 HQL 或 Criteria。

【讨论】:

不幸的是,Criteria 也不支持子查询。事实上,LINQ-to-NHibernate 是基于 ICriteria 的,而这种缺陷源于 ICriteria 本身。 标准是否支持子查询。它使用DetachedCriteria 构建并添加.Add(Subqueries.Blah(subquery))(其中BlahExistsPropertyIn 或类似的东西) 经过很长时间,我确信您是对的。对不起!【参考方案3】:

我没有使用过 nhibernate to linq,但我相信您几乎可以将任何子查询转换为连接

【讨论】:

不幸的是它也不支持连接! 请注意,select 中的子查询和 where 子句中的子查询之间存在差异:where 子句中的子查询受支持并且工作正常(Any()、Count() 等) 亲爱的martijn,我将使用“选择子查询” @martijn,经过很长时间我意识到我需要的子查询是where子句中的子查询。你是对的。【参考方案4】:

我已使用两部分 LINQ 查询作为解决方法。用于不相关子查询部分的 LINQ-to-NHibernate 和用于查询的子查询相关部分的 LINQ-to-Object。详情请见http://afsharm.blogspot.com/2010/03/dealing-with-subqueries-in-linq-to.html

【讨论】:

以上是关于对于不支持子查询的 NHibernate-to-LINQ 是不是有任何解决方法?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Athena:不支持的相关子查询类型,但它适用于 Mysql 和其他风格

以数组为参数的雪花函数因不支持的子查询错误而失败

子查询失败:由于内部错误,不支持此类关联子查询模式;

由于内部错误,不支持相关子查询模式 - 不存在相关子查询

Hive 子查询出错 - 不支持的子查询表达式

为啥 Redshift 不支持 DOES EXIST 相关子查询?