2014-09-22 57 views
0

在我的查詢中,一個人可以有多個職位。如何使用nHibernate根據沒有子查詢的條件進行投影

人員 - >作業[IdJob]

需要使投影爲一個字段中的管理器的位置和另一個投影爲管理者的位置爲其它場

,而不使用子查詢。可以做到嗎?

例:。

.SelectList(SL => SL .SelectGroup(S =>命名).WithAlias(()=>相對個人) 凡(()=> Person.idJob = 1)

/* Funcionaraia彷彿,在這裏我可以設計一個板構件來投影*/

.SelectGroup管理員類字段(S =>第名稱).WithAlias (()=> rel。Administrator)

凡(()=> Person.idJob = 2)

/*管理器對於相同*/

.SelectGroup(S =>秒。名稱).WithAlias((=)>>相關經理)

回答

0
var personName = Projections.Property<Person>(p => p.Name); 
var none = Projections.Constant(null); 
session.QueryOver<Person>() 
    .Select(
     Projections.Conditional(Expression.Where<Person>(p => p.Job == Job.Manager), personName, none).WithAlias(() => rel.Manager), 
     Projections.Conditional(Expression.Where<Person>(p => p.Job == Job.Administrator), personName, none).WithAlias(() => rel.Administrator), 
     Projections.Conditional(Expression.Where<Person>(p => p.Job == Job.Employee), personName, none).WithAlias(() => rel.Individual) 
     ); 
+0

感謝Firo!在屬性「none」中有錯誤 - >名稱「none」在上下文中不存在。不要上下文但無論如何,我需要兩個條件來驗證這個人有活躍的工作,例如。這種情況下需要子查詢,對嗎? – 2014-09-23 14:15:06

+0

none是在查詢之上定義的局部變量。它怎麼會是未知的?如果你的Job是一個實體,並且你需要限制,你需要一個通過'Subqueries'類訪問的子查詢 – Firo 2014-09-24 07:04:59