相关疑难解决方法(0)

替换lambda表达式中的参数类型

我试图将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)

c# lambda expressionvisitor

7
推荐指数
1
解决办法
2110
查看次数

如何使用带有lambda参数的typeof(object).GetMethod()

如何使用Type.GetMethod()来获取具有lambda参数的方法?我正在尝试使用以下方法获取类似Func的参数的Queryable.Any方法:

typeof(Queryable).GetMethod("Any", new Type[]{typeof(Func<ObjType, bool>)})
Run Code Online (Sandbox Code Playgroud)

但它一直返回null.

c# lambda

1
推荐指数
1
解决办法
1154
查看次数

标签 统计

c# ×2

lambda ×2

expressionvisitor ×1