Карта Funcв Func - PullRequest
       8

Карта Funcв Func

2 голосов
/ 13 октября 2010

Я использую Entity Framework за набором репозиториев.В репозиториях используются DTO вместо объектов сущностей, сгенерированных Entity Framework.Я использую AutoMapper для преобразования их туда и обратно.

У меня возникают трудности с выяснением, как сделать следующее:

Определение метода:

public IEnumerable<DTO.User> Get(Func<DTO.User, bool> whereClause)

Пример:

var users = userRepository.Get(usersWhere => usersWhere.PostCount > someNumber);

И я хотел бы иметь возможность передать это Func<T, bool> в Entity Framework следующим образом:

var users = entityFramework.Users.Where(whereClause);

Очевидно, что это не будет построено, потому чтометод .Where () ожидает Entities.User, а не DTO.User.

Есть ли способ преобразовать Func<DTO.User, bool> в Func<Entities.User, bool>?

1 Ответ

1 голос
/ 13 октября 2010

Вы можете использовать метод Select(), чтобы выполнить преобразование с помощью приведения, вызова конструктора или другого.Затем вы можете использовать свою функцию в фильтре Where(), поскольку коллекция имеет правильный тип.

var users = entityFramework.Users
                           .Select(user => (DTO.User)user) //perform the conversion
                           .Where(whereClause);

Альтернативным подходом будет создание новой функции с правильными типами для выполнения преобразования изнутри,Тогда вы можете использовать новое предложение where.

Func<Entities.User, bool> newWhereClause = user => whereClause((DTO.User)user); //convert here
...