热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

是否有任何方法可以分解Expression<Func<T,Bool>>并获得相等比较的右侧?

如何解决《是否有任何方法可以分解Expression<Func<T,Bool>>并获得相等比较的右侧?》经验,为你挑选了1个好方法。

这可能是一个远景,但无论如何我都会尝试.

让我们说我有这样的表达方式:

public class Foo {
    public int Id { get; set; }
}

Expression> expr = p => p.Id == 2;

有没有办法打破表达,让我们说:

获取成员名称(expr.Body作为MemberExpression).Member.Name;

并获得相等比较的右侧值.也就是说,2.

或者这不可能吗?



1> xanatos..:
Expression> expr = p => p.Id == 2; // Supports even p.Id.Equals(2)
BinaryExpression be = expr.Body as BinaryExpression;

if (be != null) 
{
    Expression left = be.Left;
    Expression right = be.Right;
} 
else 
{
    MethodCallExpression mc = expr.Body as MethodCallExpression;

    if (mc != null && mc.Method.Name == "Equals" && mc.Arguments.Count == 1) 
    {
        Expression obj = mc.Object; // "left"
        Expression arg = mc.Arguments[0]; // "right"
    }
    else
    {
        // not supported
    }
}

这里是...

请注意,这只适用于最简单的情况,其中有一个简单的BinaryExpressionMethodCallExpressionEquals.

但是,例如表达式是:

Expression> expr = p => true;

要么...

Expression> expr = p => p.Id == 2 && something;

然后它将无法正常工作.


推荐阅读
author-avatar
zhj808008
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有