DynamicLinq:如何使用没有类名的自定义类方法来 ParseLambda

Posted

技术标签:

【中文标题】DynamicLinq:如何使用没有类名的自定义类方法来 ParseLambda【英文标题】:DynamicLinq : how to use custom class method without class name to ParseLambda 【发布时间】:2022-01-08 17:03:12 【问题描述】:

我正在使用DynamicExpressionParser.ParseLambda(ParsingConfig, ....)

除了ParsingConfig,我们可以指定自定义类在表达式中使用其方法,可以解析为有效的LambdaExpression

我已经通过CustomTypeProviderParsingConfig 中注册了自定义静态类,并且也可以解析 lambda 表达式。

但我需要将表达式创建为StaticClassName.Method(input)

有什么方法可以注册我的静态类方法,这样我就可以直接调用方法而无需指定类名?像Method(input) 的表达式?

由于 DynamicLinq 支持许多自定义函数,例如 iif(x, y, z),它们可以直接作为内置方法在表达式中使用

参考:https://dynamic-linq.net/expression-language

所以在想它是否提供任何方法来注册自定义类方法,通过这种方法我们可以在表达式中使用方法名称吗?

请让我知道是否有任何其他方法可以使用/不使用 DynamicLinq 来实现此类功能。

【问题讨论】:

【参考方案1】:

您是否使用[DynamicLinqType] 属性注释了您的静态类?

例子:

[DynamicLinqType]
public static class Utils

    public static int ParseAsInt(string value)
    
        if (value == null)
        
             return 0;
        

        return int.Parse(value);
    

    public static int IncrementMe(this int values)
    
        return values + 1;
    

这是必需的,以便 System.Linq.Dynamic.Core 可以处理这些自定义类。

另见https://dynamic-linq.net/advanced-extending

【讨论】:

即使在基于上述 DynamicLinq 文档使用 [DynamicLinqType] 注释类之后,我们也可以使用像 Utils.ParseAsInt(Value); 这样的 Utils 类,但我的问题是不同的,是否可以使用像 ParseAsInt(Value); 这样的语法,就像我们可以去带有静态命名空间,那么可以不用类名直接使用方法吗?

以上是关于DynamicLinq:如何使用没有类名的自定义类方法来 ParseLambda的主要内容,如果未能解决你的问题,请参考以下文章

python成员函数如何调用静态函数

如何在 react-slick 中将类添加到 li 标签

如何使具有多个 init args 的自定义异常类可腌制

如何检查 Bootstrap 4 的自定义复选框状态?

在没有类依赖的自定义类/子系统中使用 Laravel 4 模型

有没有办法制作一个可以在 Java 中使用 [] 的自定义类,类似于数组?