C# 使用另一个表达式的参数创建LinQ表达式 投票结束我的问题

C# 使用另一个表达式的参数创建LinQ表达式 投票结束我的问题,c#,.net,linq,lambda,C#,.net,Linq,Lambda,我发现了一个类似的问题和一个非常有用的答案 ExpressionVisitor类链接: . 谢谢大家,我投票给我的答案是重复的,请考虑投票。 密码 我正在开发一个使用数据传输对象的存储库代码,如下面的代码 public class UsuarioRepositorio : IUsuarioRepository { private readonly MongoRepository<UsuarioDto> _Repository; public UsuarioRepos

我发现了一个类似的问题和一个非常有用的答案 ExpressionVisitor类链接: . 谢谢大家,我投票给我的答案是重复的,请考虑投票。

密码 我正在开发一个使用数据传输对象的存储库代码,如下面的代码

public class UsuarioRepositorio : IUsuarioRepository
{
    private readonly MongoRepository<UsuarioDto> _Repository;

    public UsuarioRepository(string connectionString)
    {
        _Repositorio = new MongoRepository<UsuarioDto>(connectionString, "");
    }
}

public interface IUsuarioRepository
{  
    IEnumerable<T> Select(Expression<Func<Usuario, bool>> predicate);
}
UsuarioDto是Usuario类的数据传输对象,两者都从接口IUsuario继承

UsuarioRepository实现了IUsuarioRepository接口,并有一个名为_Repository的私有成员,该成员属于MongoRepository类型

_存储库成员有一个名为Select的方法,该方法接受Expression类型的参数

IUsuarioRepository有一个名为Select的声明方法,该方法接受表达式类型的参数

问题 问题是我需要在UsuarioRepository中实现Select方法,使用IUsuarioRepository方法签名并向_Repository传递一个表达式类型的新表达式,该表达式的参数与表达式参数相同

基本上,我需要一种方法将表达式参数复制到不同类型的新表达式中,知道这些表达式具有相同的属性,因为它们具有相同的接口继承。大概是这样的:

public IEnumerable<Usuario> Select(Expression<Func<Usuario, bool>> predicate)
{
    Expression<Func<UsuarioDto, bool>> transferExpression = x => x != null;
    transferExpression = transferExpression .Update(predicate.Body, predicate.Parameters);

    return _Repository.Select(transferExpression ).ToList().Select(x => x.ToDomain());
}
问题 表达式类型的更新方法的工作方式是否与上面的代码类似? 如果不起作用,是否有方法复制不同类型但具有相同基/接口属性的表达式?
多谢各位

我有一篇关于在这里组合两个相同类型的表达式的博文:

要使用2种类型,只需将扩展类LambdaExtensions中的静态方法更改为使用T,T2而不是T

警告一句,如果引用不在T1中的T2属性,可能不会成功-您需要处理此问题

我已经为您提供了一个起点,我也将亲自尝试,稍后我将更新此答案-但您可以自己尝试这么久。

可能重复的可能重复的