我在一组存储库后面使用Entity Framework。存储库使用DTO而不是实体框架生成的实体对象。我正在使用AutoMapper来回转换它们。
我无法弄清楚如何执行以下操作:
方法定义:
public IEnumerable<DTO.User> Get(Func<DTO.User, bool> whereClause)
示例:
var users = userRepository.Get(usersWhere => usersWhere.PostCount > someNumber);
我希望能够将Func<T, bool>
传递给实体框架,如下所示:
var users = entityFramework.Users.Where(whereClause);
显然,这不会构建,因为.Where()方法需要Entities.User
,而不是DTO.User
。
有没有办法将Func<DTO.User, bool>
转换为Func<Entities.User, bool>
?
答案 0 :(得分:1)
您可以使用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