【问题标题】:NHibernate QueryOver with nested select in FROMNHibernate QueryOver 与 FROM 中的嵌套选择
【发布时间】:2011-09-19 17:15:34
【问题描述】:

您将如何使用 QueryOver(或 CriteriaAPI)编写以下内容?

select foo from (select 1 as foo) as bar

【问题讨论】:

  • AIFAIK Criteria 和 Queryover(Criteria 的包装器)不能在 from 子句中进行查询。你必须求助于select (select 1 as foo) from bar

标签: nhibernate criteria-api queryover


【解决方案1】:

如果您使用QueryOver 接口,这实际上并不完全明显——它比最初看起来更复杂和微妙。考虑使用NHibernate.Linq.LinqExtensionMethods.Query<T>

session.Query<Person>().Select(p => p.Husband).Select(p => p.Name).ToList()

会给你一个List&lt;string&gt;,对应的sql:

select h.name from (select husband as h from person) as h

【讨论】:

  • 实际的查询比这更复杂,后来被重写以避免这种嵌套选择(无论如何可能更好)。我还没有使用过 LinqExtensionMethods,不过看起来很有趣,而且看起来它确实具有所需的功能。
  • 它意味着比标准 QueryOvers 更接近 Linq。我在使用它们进行自定义获取时遇到了麻烦,或者任何更复杂的东西,例如session.Query&lt;Person&gt;().Where(p =&gt; p.Husband.Name == "Clive") 不起作用(而 session.QueryOver&lt;Person&gt;().Fetch(p =&gt; p.Husband).Eager.WhereRestrictonOn... and so on 会做你所期望的。
  • 到目前为止,除了上面提到的之外,我在使用 QueryOver 实现查询时没有遇到任何问题,但我已经简化了查询。但是,我还没有看到在多个字段上进行连接的可能性。
  • 什么样的加入?例如,您可以这样做:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多