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
我已经通过CustomTypeProvider
在ParsingConfig
中注册了自定义静态类,并且也可以解析 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的主要内容,如果未能解决你的问题,请参考以下文章