2012-06-27 124 views
1

好的,這是我的NHibernate問題。NHibernate:通過ID集合訂購結果

我有一組動態更改的ID,所以我無法硬編碼這些值。使用這些ID,我需要使用這些ID排序查詢。

集ID(類型「長」)用命令(這些動態改變):

{8, 6, 23, 3, 7, 1, 9} 

從這些喂,我從我的查詢的結果如下(因爲它有其他的WHERE子句) :

{6, 7, 23, 8, 1} 

最後,這些結果應該用年初設定指定的ID進行排序,以便看起來像這樣:

{8, 6, 23, 7, 1} 

我不能在內存中執行此操作的原因是因爲查詢還有一個.take()值(例如10行),因此在結果集受限之前必須在查詢中完成排序,否則我可能會損失數據的。

在MySQL這樣的查詢相當於將是:

ORDER BY CASE ID 
WHEN 8 THEN 1 
WHEN 6 THEN 2 
WHEN 23 THEN 3 
WHEN 3 THEN 4 
WHEN 7 THEN 5 
WHEN 1 THEN 6 
WHEN 9 THEN 7 
ELSE 8 

需要注意的是我不能使用HQL或LINQ的是很重要的。一切都使用Lambda表達式完成。我使用的是NHibernate v3.3.0.4000,.NET 4.0(C#)和MySQL Server v5.5.16。

謝謝。

回答

0

給一個起點,在QueryOver /標準您可以添加訂單作爲可成爲有條件

session.QueryOver<SomeClass>() 
    .Where(lambdaExpression) 
    .OrderBy(Projections.Conditional(...)) 
投影