将Expression <Func <T,bool >>转换为Expression <Func <T1,bool >>,以便T是T1的成员

披头士乐队1692

我们有一个类型为type的实体,T1其成员为type T像这样的东西:

public class T1
{
    public T Member{get;set;}
}

用户可以使用我们的UI给我们提供T过滤器,并将其转换为获取T并返回bool的函数的表达式 (Expression<Func<T,bool>>)

我想知道是否可以将其转换为获取T1并返回bool的函数的表达式。

实际上,我想将其转换为:

(t=>t.Member1==someValue && t.Member2==someOtherValue);

对此:

(t1=>t1.Member.Member1==someValue && t1.Member.Member2==someOtherValue);
格伦迪

您可以通过几种方法来做到这一点。

首先也是最简单的:使用Expression.Invoke

Expression<Func<T, bool>> exprT = t.Member1==someValue && t.Member2==someOtherValue
ParameterExpression p = Expression.Parameter(typeof(T1));
var expr = Expression.Invoke(expr, Expression.PropertyOrField(p, "Member"));
Expression<Func<T1, bool>> exprT1 = Expression.Lambda<Func<T1, bool>>(expr, p);

但在这种情况下,您不会

t1 => (t=>(t.Member1==someValue && t.Member2==someOtherValue))(t1.Member), 

代替

(t1=>t1.Member.Member1==someValue && t1.Member.Member2==someOtherValue);

对于替换,您可以使用ExpressionVisitor类,例如

    class V : ExpressionVisitor
    {
        public ParameterExpression Parameter { get; private set; }
        Expression m;
        public V(Type parameterType, string member)
        {
            Parameter = Expression.Parameter(parameterType);
            this.m = Expression.PropertyOrField(Parameter, member);
        }
        protected override Expression VisitParameter(ParameterExpression node)
        {
            if (node.Type == m.Type)
            {
                return m;
            }
            return base.VisitParameter(node);
        }
    }

并使用它

var v = new V(typeof(T1), "Member");
var exprT1 = Expression.Lambda<Func<T1, bool>>(v.Visit(exprT.Body), v.Parameter);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

来自分类Dev

无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

来自分类Dev

是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

来自分类Dev

将表达式转换为Expression <Func <T,bool >>

来自分类Dev

如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

来自分类Dev

如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

来自分类Dev

将Func <T,TProperty>转换为Expression <Func <T,Property >>

来自分类Dev

方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

来自分类Dev

如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

来自分类Dev

有没有办法将Func <T1,bool>映射到Func <T2,bool>?

来自分类Dev

如何将IQueryable <T>转换为Expression <Func <T,bool >>?

来自分类Dev

正文Expression <Func <T,bool >>的复杂编辑

来自分类Dev

将Expression <Func <T,V >>转换为Expression <Func <T,Nullable <V >>>

来自分类Dev

将Expression <Func <T,TProperty >>转换为Expression <Func <object,object >>,反之亦然

来自分类Dev

将谓词<T>转换为Func <T,bool>

来自分类Dev

如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

来自分类Dev

将Expression <Func <TModel,TValue >>转换为Expression <Func <TModel,bool >>

来自分类Dev

将Expression <Func <TEntity,IEnumerable <TProperty >>> valueSelector,TValue []值转换为Expression <Func <TElement,bool >>

来自分类Dev

在IGrouping中使用Where(Expression <Func <T,bool >>)

来自分类Dev

从Expression <Func <T,bool >>实体框架返回所有实体

来自分类Dev

实体框架过滤器“ Expression <Func <T,bool >>”

来自分类Dev

C#成员表达式Func <T,object>转换为Func <T,bool> MethodBinaryExpression

来自分类Dev

将Expression <Func <T,bool >>传递到存储库的单元测试查询

来自分类Dev

将MemberInfo反射到Func <T1,T2>

来自分类Dev

Func <T,bool>的逻辑逆

来自分类Dev

如何将简单的视图模型转换为Func <T,bool>谓词?

来自分类Dev

无法理解如何编码Func <Func <T1,T2>,T3>

来自分类Dev

将Expression <T,string >>转换为Expression <T,bool >>

来自分类Dev

如何从 Expression<Func<TSource, TSourceMember>> 转换为 Func<TSource, bool> 条件

Related 相关文章

  1. 1

    将Expression <Func <T1 >>转换为Expression <Func <T1,T2 >>

  2. 2

    无法从 `Expression<Func<T1, T2>>` 转换为 `Expression<Func<object, object>>`

  3. 3

    是否可以将Expression <Func <T,bool >>转换为Expression <Func <MyType,bool >>?

  4. 4

    将表达式转换为Expression <Func <T,bool >>

  5. 5

    如何将 BinaryExpression 转换为 Expression<Func<T, bool>>?

  6. 6

    如何将Expression <Func <T,object >>转换为Expression <Func <T,bool >>?

  7. 7

    将Func <T,TProperty>转换为Expression <Func <T,Property >>

  8. 8

    方法重载中的 Expression<Func<T,bool>> 与 Func<T,bool>

  9. 9

    如何将委托`Func<T1, Func<T2, Task<TResult>>>` 转换为`Func<T1, Task<Func<T2, TResult>>`?

  10. 10

    有没有办法将Func <T1,bool>映射到Func <T2,bool>?

  11. 11

    如何将IQueryable <T>转换为Expression <Func <T,bool >>?

  12. 12

    正文Expression <Func <T,bool >>的复杂编辑

  13. 13

    将Expression <Func <T,V >>转换为Expression <Func <T,Nullable <V >>>

  14. 14

    将Expression <Func <T,TProperty >>转换为Expression <Func <object,object >>,反之亦然

  15. 15

    将谓词<T>转换为Func <T,bool>

  16. 16

    如何在C#中将LambdaExpression转换为Expression <Func <T,bool >>

  17. 17

    将Expression <Func <TModel,TValue >>转换为Expression <Func <TModel,bool >>

  18. 18

    将Expression <Func <TEntity,IEnumerable <TProperty >>> valueSelector,TValue []值转换为Expression <Func <TElement,bool >>

  19. 19

    在IGrouping中使用Where(Expression <Func <T,bool >>)

  20. 20

    从Expression <Func <T,bool >>实体框架返回所有实体

  21. 21

    实体框架过滤器“ Expression <Func <T,bool >>”

  22. 22

    C#成员表达式Func <T,object>转换为Func <T,bool> MethodBinaryExpression

  23. 23

    将Expression <Func <T,bool >>传递到存储库的单元测试查询

  24. 24

    将MemberInfo反射到Func <T1,T2>

  25. 25

    Func <T,bool>的逻辑逆

  26. 26

    如何将简单的视图模型转换为Func <T,bool>谓词?

  27. 27

    无法理解如何编码Func <Func <T1,T2>,T3>

  28. 28

    将Expression <T,string >>转换为Expression <T,bool >>

  29. 29

    如何从 Expression<Func<TSource, TSourceMember>> 转换为 Func<TSource, bool> 条件

热门标签

归档