将Func <type1,bool =“”>映射到Func <type2,bool =“”> </type2,> </type1,>

时间:2010-10-13 01:59:16

标签: c# entity-framework lambda automapper

我在一组存储库后面使用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>

1 个答案:

答案 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