Mysql NHibernate:按ID集合排序结果

Mysql NHibernate:按ID集合排序结果,mysql,hibernate,nhibernate,case,Mysql,Hibernate,Nhibernate,Case,好的,这就是我对NHibernate的问题 我有一组动态变化的ID,因此无法硬编码这些值。使用这些ID,我需要使用这些ID进行查询 要订购的ID集(类型“long”)(这些ID会动态更改): 比如说,我从查询中得到以下结果(因为它会有其他WHERE子句): 最后,应使用开头指定的一组ID对这些结果进行排序,以便看起来像这样: {8, 6, 23, 7, 1} 我无法在内存中执行此操作的原因是,查询还有一个.take()值(例如10行),因此必须在限制结果集之前在查询中进行排序,否则可能会丢失数

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

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

要订购的ID集(类型“long”)(这些ID会动态更改):

比如说,我从查询中得到以下结果(因为它会有其他WHERE子句):

最后,应使用开头指定的一组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表达式完成的。我使用的是NHibernateV3.3.0.4000、.NET4.0(C#)和MySQL服务器v5.5.16


谢谢。

要给出一个起点,在查询/条件上,您可以添加订单作为投影,该投影可以是条件投影

session.QueryOver<SomeClass>()
    .Where(lambdaExpression)
    .OrderBy(Projections.Conditional(...))
session.QueryOver()
.Where(lambdaExpression)
.OrderBy(projects.Conditional(…))
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
session.QueryOver<SomeClass>()
    .Where(lambdaExpression)
    .OrderBy(Projections.Conditional(...))