System.Linq.Dynamic.Core:类型中不存在适用的方法“ArrayLength”

问题描述 投票:0回答:1

解析表达式时,出现错误“‘Product’类型中不存在适用的方法‘ArrayLength’”。

这是表达式本身:

var experession = "p => (p.MarketingProduct!= null) AndAlso (ArrayLength(p.MarketingProduct.Categories) > 0)"
var result = DynamicExpressionParser.ParseLambda<Product, bool>(new ParsingConfig(), true, experession);

System.Linq.Dynamic.Core 库中有针对此问题的内置解决方案吗?

var 结果 = DynamicExpressionParser.ParseLambda(new ParsingConfig(), true, experession);

c# linq lambda dynamic expression
1个回答
0
投票

您遇到的错误消息“‘Product’类型中不存在适用的方法‘ArrayLength’”表明 System.Linq.Dynamic.Core 库无法识别您尝试解析的表达式中的 ArrayLength 函数。该库主要使用标准 .NET 方法和函数,ArrayLength 不是 C# 或 .NET 中的内置函数。

如果要检查动态 LINQ 表达式中数组或集合的长度,可以使用 Count() 方法。以下是修改表情的方法:

var expression = "p => (p.MarketingProduct != null) && (p.MarketingProduct.Categories != null && p.MarketingProduct.Categories.Count() > 0)";
var result = DynamicExpressionParser.ParseLambda<Product, bool>(new ParsingConfig(), true, expression);

在此修改后的表达式中,我们检查 MarketingProduct 是否不为 null,以及 MarketingProduct.类别不为空。然后,我们使用 Count() 方法检查 Category 集合中是否有任何元素。

这应该与 System.Linq.Dynamic.Core 库一起使用,并帮助您避免您提到的错误。

© www.soinside.com 2019 - 2024. All rights reserved.