C# 使用另一个表达式的参数创建LinQ表达式 投票结束我的问题
我发现了一个类似的问题和一个非常有用的答案 ExpressionVisitor类链接: . 谢谢大家,我投票给我的答案是重复的,请考虑投票。 密码 我正在开发一个使用数据传输对象的存储库代码,如下面的代码C# 使用另一个表达式的参数创建LinQ表达式 投票结束我的问题,c#,.net,linq,lambda,C#,.net,Linq,Lambda,我发现了一个类似的问题和一个非常有用的答案 ExpressionVisitor类链接: . 谢谢大家,我投票给我的答案是重复的,请考虑投票。 密码 我正在开发一个使用数据传输对象的存储库代码,如下面的代码 public class UsuarioRepositorio : IUsuarioRepository { private readonly MongoRepository<UsuarioDto> _Repository; public UsuarioRepos
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属性,可能不会成功-您需要处理此问题 我已经为您提供了一个起点,我也将亲自尝试,稍后我将更新此答案-但您可以自己尝试这么久。可能重复的可能重复的