Как преобразовать выражение в лямбда-выражение? - PullRequest
1 голос
/ 17 июля 2011

Я пытаюсь преобразовать выражение типа Expression<Func<Entity, bool>> в Func<Entity, bool>.

Основой здесь является то, что я пытаюсь смоделировать репозиторий, чтобы он возвращал один из набора макетовсущности для данного значения ключа.(Я мог бы жестко закодировать входные значения для смоделированного метода, но это кажется неправильным подходом для большого количества элементов).

Поэтому я пытаюсь смоделировать метод First в моем хранилище следующим образом:*

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));

Это не работает, потому что collection.First использует Func, а не Expression>.Итак, я дошел до того, что мне нужно преобразовать Expression в содержащий его Func.

Возможно, здесь проще или лучше сделать это?

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

Это уже - это лямбда-выражение.Но чтобы получить делегат из лямбды, вызовите .Compile().

В смысле general - чтобы создать лямбду из выражения, вы бы использовали Expression.Lambdaс указанием нужного типа и включением экземпляров параметра (объявления) (из Expression.Parameter).Однако здесь это не требуется.

4 голосов
/ 17 июля 2011

Вам нужно вызвать Compile в выражении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...