nhibernateのコレクションカウントによる順序付け
-
05-07-2019 - |
質問
コレクションであるプロパティのカウントでオブジェクトのリストを並べ替える方法はありますか?
引数のために、質問名プロパティ、回答オブジェクトのコレクションであるプロパティ、およびユーザーオブジェクトのコレクションである別のプロパティを持つ質問オブジェクトがあるとしましょう。ユーザーは質問テーブルの外部キーを介して質問テーブルに参加し、回答は中間参加テーブルに参加します。
nhibernateに" question"のリストを取得させたい場合オブジェクトは私がそれを注文することができます 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"
リストごとにすべてのプロパティをグループに追加しようとしましたが、機能しません。その場合、外部キーuserIdは上記と同じエラーを引き起こしますが、nhibernateが
としてリストするため、グループに含めることができませんQuestion.Users.UserId
これを含めると解決しません。
アイデアはありますか
解決 2
iはlinqを使用できません。
私が解決した方法(そして、あなたはそれをロバと決めるかもしれません)は、UDFを使用してカウントを計算する計算列をデータベースに作成することです。次に、hibernateマッピングの列にupdate =&quot; false&quot;のマークを付けました。およびinsert =&quot; false&quot;。
iは通常、この新しい列でクエリを並べ替えることができます。アプリ全体で必要な場所でこの値をバインドできるというボーナスが追加されます。
それは大丈夫なようです。うまくいけば、パフォーマンスにあまり影響を与えないでしょう。
他のヒント
この問題に遭遇し、Linqを使用して回避しました。
var sort = from n in c
orderby q.Answers.Count
select n;
私はそれが構文だと信じています。もし誰かがそれが素晴らしいことを確認できれば、私はあまりLINQを使用していません。