2

コレクションであるプロパティの数によってオブジェクトのリストを並べ替える方法はありますか?

議論のために、質問名プロパティを持つ質問オブジェクト、回答オブジェクトのコレクションであるプロパティ、およびユーザー オブジェクトのコレクションである別のプロパティがあるとします。ユーザーは質問テーブルの外部キーを介して質問テーブルに参加し、回答は中間の結合テーブルで結合されます。

nhibernate に「質問」オブジェクトのリストを取得させたい場合、Question.Answers.Count で注文できますか?

HQLを使用してドキュメントの例を試しました:

 List<Question> list = nhelper.NHibernateSession
        .CreateQuery("Select q from Question q left join q.Answers a group by q,a order by count(a)")
        .List<Question>();

しかし、私は得る

"column Question.Name is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause" 

すべてのプロパティを group by リストに追加しようとしましたが、うまくいきません。次に何が起こるかというと、外部キー userId が上記と同じエラーを引き起こしますが、nhibernate が次のようにリストしているため、それをグループに含めることはできません。

Question.Users.UserId

含まれていても解決しません。

何か案は?

4

2 に答える 2

0

私はリンクを使用することはできません。

私がそれを解決した方法(そしてあなたはそれがロバだと決めるかもしれません)は、UDFを使用してカウントを計算する計算列をデータベースに作成することです。次に、休止状態マッピングの列を update="false" および insert="false" としてマークしました。

通常どおり、この新しい列でクエリを並べ替えることができます。アプリ全体で必要な場所にこの値をバインドできるという追加のボーナスが得られます。

それはうまくいくようです。

于 2008-10-31T15:54:45.227 に答える
0

私はこの問題に遭遇し、Linq を使用して回避しました。

            var sort = from n in c
                       orderby q.Answers.Count
                       select n;

私はそれが構文だと信じています。誰かがそれを確認できれば、私はLINQをあまり使用していません。

于 2008-10-30T19:28:17.890 に答える