2010-08-12 97 views
0

我有两个类:表达式树转换

class Customer 
{ 
    public string Fullname { get; set; } 
    public string Lastname { get; set; } 
    public int Age { get; set; } 
} 

class CustomerDTO 
{ 
    public string Fullname { get; set; } 
    public string Lastname { get; set; } 
    public int Age { get; set; } 
} 

现在我已经各层之间传递的expressiontree Expression<Func<Customer, bool>> expression,我可以将其转换为Expression<Func<CustomerDTO, bool>> expression,以便能够使用它,因为它会给编译时间错误!

在此先感谢

+0

任何机会,你可以用一个接口,而不是类的?不知道我自己,只是一个建议。 – Lazarus 2010-08-12 11:26:21

+0

即'Expression >表达式'Customer和CustomerDTO然后实现该接口。 – Lazarus 2010-08-12 11:32:11

+0

我不能这样做,因为这导致第一类生成,我可以强制它实现一个接口! – Stacker 2010-08-12 11:39:59

回答

0

没关系我做到了

Expression<Func<Customer, bool>> expression = v => v.Fullname == "Johm"; 
     var par = Expression.Parameter(typeof(CustomerDTO)); 
     Expression<Func<CustomerDTO, bool>> ex = (Expression<Func<CustomerDTO, bool>>)Expression.Lambda(expression.Body, par); 
+0

不错,现在就接受你自己的答案,这样它就会从队列中移除。 :) – 2010-08-12 14:51:07

+0

虽然你的解决方案可以工作,而且我知道你说过你不想使用接口,但是现在通常是一个代码生成器,这些代码生成代码就像部分类一样。你可以在你实现接口的同一个类中添加一个局部类部件(所以另一个局部部件可以在下一个重新生成时被吹掉)。然后你可以使用'Expression >' – 2011-02-24 22:19:48