gpt4 book ai didi

c# - 有没有办法分解 Expression> 并获得相等比较的右侧?

转载 作者:行者123 更新时间:2023-11-30 20:23:33 25 4
gpt4 key购买 nike

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

假设我有这些礼仪的表达方式:

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

Expression<Func<Foo, bool>> expr = p => p.Id == 2;

有什么方法可以分解表达式,比方说:

  • 获取成员名称(expr.Body as MemberExpression).Member.Name;

  • 并获取相等比较右侧的值。也就是2。

或者这是不可能的?

最佳答案

Expression<Func<Foo, bool>> 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
}
}

这里是...

请注意,这仅适用于最简单的情况,其中有一个简单的 BinaryExpressionMethodCallExpression 以及 Equals

但是如果例如表达式是:

Expression<Func<Foo, bool>> expr = p => true;

或者...

Expression<Func<Foo, bool>> expr = p => p.Id == 2 && something;

那就不行了。

关于c# - 有没有办法分解 Expression<Func<T, Bool>> 并获得相等比较的右侧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com