我试图将lambda表达式中的参数类型从一种类型替换为另一种类型.
我在stackoverflow上找到了其他答案,即这个,但我没有运气.
想象一下你有一个域对象和一个存储库,你可以从中检索域对象.
但是,存储库必须处理自己的数据传输对象,然后映射并返回域对象:
ColourDto.cs
public class DtoColour {
public DtoColour(string name)
{
Name = name;
}
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
DomainColour.cs
public class DomainColour {
public DomainColour(string name)
{
Name = name;
}
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Repository.cs
public class ColourRepository {
...
public IEnumerable<DomainColour> GetWhere(Expression<Func<DomainColour, bool>> predicate)
{
// Context.Colours is of type ColourDto
return Context.Colours.Where(predicate).Map().ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这将不起作用,因为谓词是针对域模型的,而存储库中的Collection是数据传输对象的集合.
我试图使用an ExpressionVisitor来做到这一点,但无法弄清楚如何只更改ParameterExpression没有例外被抛出的类型,例如:
测试场景
public class ColourRepository …Run Code Online (Sandbox Code Playgroud) 如何使用Type.GetMethod()来获取具有lambda参数的方法?我正在尝试使用以下方法获取类似Func的参数的Queryable.Any方法:
typeof(Queryable).GetMethod("Any", new Type[]{typeof(Func<ObjType, bool>)})
Run Code Online (Sandbox Code Playgroud)
但它一直返回null.