gpt4 book ai didi

c# - 在 Linq.Expressions.Expression 中使用 Math.Abs​​ - 动态查询创建

转载 作者:行者123 更新时间:2023-12-03 23:10:23 24 4
gpt4 key购买 nike

我正在使用表达式以编程方式创建动态查询。

Expression.Subtract(exp1, exp2);

在一个需求中,我需要使用表达式的绝对值。类似的东西 -

Math.Abs(Expression.Subtract(exp1, exp2));

但是我遇到了以下错误 -

The best overloaded method match for System.Math.Abs(decimal)' has some invalid arguments

最佳答案

您不想在表达式上调用Math.Abs​​()。您想要创建一个表达式,表示对 Math.Abs​​() 的调用以及 Subtract 表达式的结果。

因此,首先您需要找到 Math.Abs​​() 的正确重载,该重载采用减法表达式返回的类型的参数:

var sub = Expression.Subtract(exp1, exp2);
MethodInfo abs = typeof(Math).GetMethod("Abs", new[]{sub.Type});
if (abs == null)
// error handling here: no matching method found

sub.Type 是减法表达式的返回类型。

然后您可以创建调用表达式:

var call = Expression.Call(null, abs, sub);

关于c# - 在 Linq.Expressions.Expression 中使用 Math.Abs​​ - 动态查询创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48420769/

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