2011-07-17 10 views
1

タイプExpression<Func<Entity, bool>>の式をFunc<Entity, bool>に変換しようとしています。式をラムダ式に変換するにはどうすればよいですか?

ここでの背景は、リポジトリを模擬して、指定されたキー値のモックエンティティのコレクションの1つを返すようにしようとしていることです。 (私は虚偽の方法に入力値をハードコードすることができますが、これは多数の項目が誤っているように見えます)。

だから私はこのように私のリポジトリ上の第一の方法を模擬しようとしています:collection.First>はむしろ式よりのFuncがかかるため

var collection = new List<Entity> 
{ 
    mockedEntity1, 
    mockedEntity2, 
    mockedEntity3, 
    ... 
}; 

mockRepository 
    .Setup(rep => rep.First(It.IsAny<Expression<Func<Entity, bool>>>())) 
    .Returns<Expression<Func<Entity, bool>>>(e => collection.First(e)); 

これは動作しません。だから私は、それが含まれている関数に式を変換する必要があるポイントにしている。

おそらく、これを行うにはもっと簡単でよいでしょうか?

答えて

4

Compileに電話する必要があります。

+0

ありがとうございました。それは働いた:) – Reee

4

すでには、λ発現であるである。しかし、代理人をラムダから取得するには、.Compile()に電話してください。

一般 sense - Expressionからラムダを作成するには、Expression.Lambdaを使用します。これは、目的の型を示し、パラメータ(宣言)インスタンス(Expression.Parameter)を含みます。ただし、ここではこれは必要ありません。

+0

それは本当です。ありがとう:) – Reee

関連する問題