2012-06-27 2 views
1

Итак, это моя проблема с NHibernate.NHibernate: Результаты поиска по коллекции ID

У меня есть набор идентификаторов, который изменяется динамически, поэтому я не могу жестко задавать значения. Используя эти идентификаторы, мне нужно заказать запрос с этими идентификаторами.

Набор идентификаторов (типа «длинный») на заказ с (это динамически изменяется):

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

Say из них, я получаю следующие результаты от моего запроса (так как он будет иметь другое WHERE положения) :

{6, 7, 23, 8, 1} 

Наконец, эти результаты должны быть упорядочены с помощью набора идентификаторов, указанных в начале так, чтобы выглядеть примерно так:

{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. Все делается с помощью лямбда-выражений. Я использую NHibernate v3.3.0.4000, .NET 4.0 (C#) и MySQL Server v5.5.16.

Спасибо.

ответ

0

дать начальную точку, на QueryOver/Criteria вы можете добавить заказы как проекция, которая может быть условным

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