1

わかりましたので、これは 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 は使用できないことに注意してください。すべてラムダ式を使用して行われます。NHibernate v3.3.0.4000、.NET 4.0 (C#)、および MySQL Server v5.5.16 を使用しています。

ありがとう。

4

1 に答える 1

0

出発点を与えるために、QueryOver / Criteriaで、条件付きの予測として注文を追加できます

session.QueryOver<SomeClass>()
    .Where(lambdaExpression)
    .OrderBy(Projections.Conditional(...))
于 2012-06-28T14:38:38.143 に答える