将包含特定标识符的数组解析为表达式

Parse as expression an array containing specific identifier

我正在使用 ParseAsExpression 从字符串表达式构建动态 lamda 表达式。问题是我无法弄清楚如何解析包含 mylist.Contains(x.Id)

这样的对象的数组表达式

完整示例

 var list = new int[] { 4,5,6};
 var whereFunction = new Interpreter().SetVariable("mylist", list);    
 whereFunction.ParseAsExpression<Func<Person, bool>>("(person.Age == 5 && person.Name.StartsWith(\"G\")) || person.Age == 3 && mylist.Contains(person.Id)", "person");

我可以确认这是一个错误:https://github.com/davideicardi/DynamicExpresso/issues/68

现在 Array.Contains 不起作用。

更新:

已在版本 2.0.2 中修复。

现在您可以通过为每个方法实现别名扩展方法来解决问题,例如 Contains=>Exists

 var list = new int[] { 4,5,6};

 var whereFunction = new Interpreter()
.SetVariable("mylist", list)
.Reference(typeof(ExtensionMethods));

 whereFunction.ParseAsExpression<Func<Person, bool>>("(person.Age == 5 && person.Name.StartsWith(\"G\")) || person.Age == 3 && mylist.Exists(person.Id)", "person");

// Define this class somewhere
public static class ExtensionMethods
{
    public static bool Exists<T>(this IEnumerable arr, T searchKey)
    {
        return ((IEnumerable<T>)arr).Contains(searchKey);
    }
}

我认为这是一个愚蠢的解决方法,但它会起作用。