NHibernate:按ID集合排序结果

时间:2012-06-27 10:31:52

标签: mysql hibernate nhibernate case

好的,这是我对NHibernate的问题。

我有一组动态变化的ID,所以我无法对这些值进行硬编码。使用这些ID,我需要使用这些ID订购查询。

要订购的ID(类型'long')(这些动态变化):

{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。

感谢。

1 个答案:

答案 0 :(得分:0)

给出一个起点,在QueryOver / Criteria上你可以添加订单作为投影,可以是条件

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