2011-11-01 14 views
1

Dynamic LINQ OrderBy」と同様、私は動的なQueryOver-OrderByを作りたいと思います。私が言うの例外を取得nHibernateの動的QueryOver

query.OrderBy(h => h.GetType().GetProperty(sort.Member).GetValue(h, null)).Asc 

:私はこれを行うときしかし、

Unrecognised method call in epression h.GetType().GetProperty(value(Domain.Model.Repository+<>c__DisplayClass15).sort.Member).GetValue(h, null) 

を明らかにし、NHibernateは、いくつかのトラブルで何が起こっているか理解しています。誰かがこの特定の問題を解決するためのアイデアを持っていますか?

答えて

2

複数のエンティティが結合されていて、異なるエンティティのプロパティの組み合わせで並べ替えを実行する必要があるため、依然として問題があるため、リンクされた質問のソリューションは機能しません。私が考えることができる唯一の現実的な解決策はsort.MemberからProjection.Propertyに辞書を作成することでした。

var dict = new Dictionary<string, string>(); 
dict.Add("sortMember", "entityAlias.Property"); 
var sortOn = dict[sort.Member]; 
query.OrderBy(Projections.Property(sortOn)).Asc; 

これは非常にうまくいきます。辞書は基本的にif-else構造全体を置き換え、単純なループがorderByを追加します。私は同様の方法でフィルタリング部分を変更することができますが、まだその部分で作業する時間がなかったと思います。

0

Dynamic QueryOverはあまり意味がありません。

QueryOver自体は厳密に型付けされた基準です。 QueryOverの代わりにCriteriaを使用します。

+0

私はQueryOverの厳密な型指定された機能を使用して、クエリの主要部分を構築しています。これらの命令はGUIから来ているので理想的にはフィルタリングとソートが動的である必要があります。私は大きなif-elseを書くことができますが、反射を使ったより汎用的な解決策はより良いimhoになります。 – Pieter

0

"Dynamic Linq OrderBy"リンクで紹介した方法を使用する必要があります。あなたのコードの問題は、NHibernateがその式を解析できないということです。

また、なぜプロパティ内の値でソートしようとしているのか、プロパティ自体でソートしようとしているのか分かりません。

2あなたのリンクでの拡張メソッドのための「使用」を追加 - -

1のようにそれを使用する:あなたはすべてを行う必要があるプロパティ名でソートしようとしていると仮定すると、

query.OrderBy(sort.Member); 

試したことはありませんが、うまくいくはずです。

関連する問題