首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于表达式树的类型转换的一点有关问题

2012-08-01 
关于表达式树的类型转换的一点问题现有两个类class MyData{public int v1 {getset}public int v2 { get

关于表达式树的类型转换的一点问题
现有两个类
 class MyData
  {
  public int v1 {get;set;}
  public int v2 { get; set; }
  }
  class YouData
  {
  public int v1 { get; set; }
  public int v2 { get; set; }
  }
定义一个lambda表达式树
Expression<Func<MyData,int>> exp = m=>m.v1 + m.v2 + m.v1 * 5 - m.v2 *3;
有什么方法能让下面的表达式树满足:
Expression<Func<YouData,int>> exp2

exp2和exp只是参数不一样。

好像是可以用ExpressionVisitor来把exp的类型改为YouData,具体如何实现,请高手指点。

[解决办法]
你的YouData和MyData 要么同实现一接口,或者有继承的关系。
不然无法转换。

C# code
public class MyData : YouData{}public class YouData{    public int v1 { get; set; }    public int v2 { get; set; }}public class Service{    public int count(Expression<Func<YouData, bool>> exp)    {        //便于测试        return 1;    }}//重写Expression 访问类public class MyExpressionVisitor : System.Linq.Expressions.ExpressionVisitor{    public ParameterExpression Parameter    {        get;        set;    }    public Expression ModifyExp(Expression exp)    {        return this.Visit(exp);    }    protected override Expression VisitParameter(ParameterExpression node)    {        return Parameter;    }}public class MyApp{    public int count(Expression<Func<MyData, bool>> exp)    {        ParameterExpression param = Expression.Parameter(typeof(YouData), "name");        MyExpressionVisitor expVisitor = new MyExpressionVisitor();        expVisitor.Parameter = param;        Expression expBody = expVisitor.ModifyExp(exp.Body);        var finalExp = Expression.Lambda<Func<YouData, bool>>(expBody, param);        return new Service().count(finalExp);    }} 

热点排行