对于不支持子查询的 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))
(其中Blah
是Exists
或PropertyIn
或类似的东西)
经过很长时间,我确信您是对的。对不起!【参考方案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 是不是有任何解决方法?的主要内容,如果未能解决你的问题,请参考以下文章