2012-04-01 20 views
2

式の変換にいくつかの助けを使うことができます。式<Func <TypeIn、TypeOut1 >>から式<Func <TypeIn、TypeOut2 >>への変換

私は、次のようなクラスのメソッドを持っています。

これは、リポジトリのクラスのための一般的なクエリです。私は物事を一般的なものにしておきたいので、TOrderByパラメーターを指定して、プロパティーのタイプが重要でないようにします。しかし、この実施例では、NHibernateはを使用していると私は次のことをやろうとしている:

var query = session.QueryOver<TEntity>().OrderBy(orderBy).Asc; 

しかし、THERのOrderByメソッドは、式のパラメータを取ります>と保証TOrderByがないようので、私はコンパイルエラーを取得しますオブジェクトになります。

この変換を行う方法はありますか、それともTOrderByではなくobjectを使用するだけですか?オブジェクトに固執すれば、ValueTypes(例えばDateTime)で注文する能力を失うことはありませんか?

ご協力いただきありがとうございます。

EDIT:nhibernateとエンティティフレームワークの実装を書いているので、このジェネリックはそのままにしておきます。これは、通常のLinq OrderByメソッドを使用するため、EFでは問題ありません。それはちょうどNhibernateの実装にあります。私はこの問題を抱えています

+0

私は間違いかもしれませんが、TOrderByでエラーが発生した場合は、 "where TOrderBy:class"のような制約を追加してみてください。 –

+0

クラスの制約を追加したくない場合は、 DateTimeまたはintまたは他の値型のようなもの –

+0

typeof(TOrderBy)を使用して、参照型と値型の両方で代替ロジックを実行できますか? – Rich

答えて

0

EFでLINQを使用している場合は、なぜQueryOverの代わりにHibernateでLINQを使用しないのですか?

+0

はい、誰かがNH 3でLinq2NHが追加されたので、私はこの特定のシナリオでそれに切り替えました –

関連する問題