我在Expression中遇到了问题
我有一个实体
public class User{
public string Username{get;set;}
public int PhoneNumber{get;set;}
public string FIrstName{get;set;}
public string LastName{get;set;}
}
我有一个DTO
public class DTOUser{
public string Username{get;set;}
public int PhoneNumber{get;set;}
public string FIrstName{get;set;}
public string LastName{get;set;}
}
然后我有一个通用的代码片段
public IList<DTOUser> SelectAll(Expression<Func<DTOUser, bool>> predicate)
{
using (var adc = _conn.GetContext())
{
// what should I do ?? so i can convert Predciate to get all values from Users (Entity)
//it generates an error because predicate can't be cast into Entity User
// var users = adc.Users.All(predicate);
}
}
我希望通过传递LAMBDA表达式来获取DTOUser列表。
accountrepo.SelectAll( user => user.firstname.equals ("sample"));
我已经研究了这个问题,并得出结论,由于DTOUser和User是不同的类型,所以很难将表达式从一个类型转换为另一个类型。
Jon Skeet提出了一种解决方案: 如何将Expression<Func<T,DateTime>>转换为Expression<Func<T,object>> 但是,由于这种解决方案似乎需要将每个值从DTOUser映射到User,这是否会使它更加复杂,因为我的DTOUser包含超过15个属性。
有人能帮帮我吗?