【发布时间】:2012-11-29 12:12:12
【问题描述】:
我的表达式有问题
我有一个实体
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;}
}
然后我有一个sn-p代码通用
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 是不同的类型,所以很难将 Expression 从一种类型转换为另一种类型。
Jon Skeet 提出了一种解决方案:
How to cast Expression<Func<T, DateTime>> to Expression<Func<T, object>>
但由于这个解决方案似乎我必须将每个值从 DTOUser 映射到 User,这不会使它变得更复杂,因为我的 DTOUser 包含超过 15 个属性。
有人可以帮帮我吗?
【问题讨论】:
-
@user751959 据我了解您的问题,您希望在 User 类型的对象上应用期望类型 DTOUser 的表达式。您能否编辑问题,使其更清楚?
-
不知道如何删除我的重复标志,我只是读得太快了。我很抱歉。
-
@MiroslavBajtoš 我想要的是将 Expression
> 转换为 Expression > 以便 adc.Users.All(predicate );
标签: c# expression predicate