2013-07-01 53 views
1

我有我選的人對象:是否有可能與nhibernate有不同的值?

persCriteria = criteria.GetExecutableCriteria(Session) 
       .AddOrder(Order.Asc("LastName")) 
       .AddOrder(Order.Asc("FirstName")); 

我也有一個屬性,叫做CommonName

我想要什麼?那麼我想能夠在CommonName上排序,如果這個人有CommonName其他排序在FirstName(第一)。

現在我想知道是否有可能通過NHibernate的,表明它應該排序依據CommonName如果這個人有通過FirstName一個CommonName其他訂單?如果是這樣,怎麼樣?

回答

1

這是可能的。我們可以使用條件投影:

var conditionalOrderBy = Projections.Conditional 
(
    Restrictions.IsNull("CommonName") // or LastName, not sure from a question snippet 
    , Projections.Property("FirstName") 
    , Projections.Property("CommonName") // or LastName 
); 

var list = criteria.GetExecutableCriteria(session) 
    .AddOrder(new Order(conditionalOrderBy, true)) 
    .List<Person>() 
; 

和SQL語句中,我們得到會是這樣:

... 
ORDER BY (CASE when this_.CommonName IS NULL 
    THEN this_.FirstName 
    ELSE this_.CommonName END) 
ASC 
+0

完美!對於大量的描述感到抱歉...我對它的評價很高,而且對我來說似乎很清楚,但是現在每天我都會看到它可能很難理解。 如果我可能會麻煩你多一點......如果你有時間,你可能會向我提供有關nhibernate的教程鏈接?我有一個任務必須通過nhibernate來完成,而nopw它已經解決了,但是我從來沒有接觸過它,因爲我很難找到好的站點。 非常感謝! – ThunD3eR

相關問題