如果我有以下课程......
public class Source
{
public string Name
{
get;
set;
}
}
public class Destination
{
public string Name
{
get;
set;
}
}
...我有以下代码来创建表达式....
Expression<Func<Source, bool>> expression = e => e.Name == "Test;
...我最终得到的是一个lambda表达式,其中包含 Source
类型的单个参数( e
) . 我想要做的是将此表达式转换为 Destination
类型的参数 .
我尝试过像......
Expression<Func<Destination, bool>> expression2 = Expression.Lambda<Func<Destination, bool>>(expression.Body, Expression.Parameter(typeof(Destination), "e")));
......但这似乎不起作用 .
进行此转换的最佳方法是什么 . 从我记得的工作开始,似乎表达式树的内部部分(在本例中是成员表达式)绑定到特定类型 . 我是否需要解析整个表达式树才能进行转换?我有什么简单的遗失吗?
2 回答
我不知道你到底想要做什么 . 我只是明白你正试图使你的lambda表达式与
Source
和Destination
兼容,而不为每一个创建两个lambda表达式 .根据我的理解 .
首先创建一个这样的接口:
然后使
Source
和Destination
实现新接口IName
,如下所示:然后你的lambda表达式将如下所示:
这个lambda表达式与所有推动
IName
接口的类兼容 .如果事实处理所有可能的情况并不简单 . 仅支持谓词参数的属性/字段访问器的简化函数可以是这样的
您的样本的用法将是: