2011-09-19 46 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