2011-09-19 59 views
1

如何使用QueryOver(或CriteriaAPI)编写以下内容?NHibernate QueryOver嵌套在FROM中选择

select foo from (select 1 as foo) as bar 
+0

AIFAIK标准和Queryover(约标准的包装)不能有查询的from子句。你必须诉诸像'select(select 1 as foo)from bar'那样的行为。 – Firo

回答

0

这实际上是不完全很明显,如果你使用QueryOver接口 - 这是更为复杂和微妙的不是它第一次出现。考虑使用NHibernate.Linq.LinqExtensionMethods.Query<T>

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

会给你一个List<string>,对应于SQL:

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

实际的查询比以前更复杂,后来为了避免这种嵌套选择(可能为了更好)而被重写。我还没有使用过LinqExtensionMethods,但看起来很有趣,而且看起来好像它具有所需的功能。 – Shagglez

+0

它比标准的QueryOver更接近Linq。我在使用它们进行自定义抓取时遇到了麻烦,或者更复杂,例如'session.Query ().Where(p => p.Husband.Name ==“Clive”)'将不起作用(而'session.QueryOver ().Fetch(p => p.Husband).Eager .WhereResononOn ...等等,只会做你期望的事情。 – jelford

+0

到目前为止,除了上面提到的,我用QueryOver实现查询并没有麻烦,但是我已经简化了查询。然而,可以在多个字段上进行连接。 – Shagglez