Создание списка.Любой с выражениями

#c# #expression

Вопрос:

Возникли ошибки при построении этого.

Система.Метод исключения аргумента Func<строка,bool> Compile (), объявленный в выражении типа<строка,bool><Функция<строка,bool><строка, bool>> не может быть вызван с экземпляром функции<строка,bool>><строка, bool>

  //How to create this through Expression API
        Func<List<string>, string,  bool> containsAny = (list,text) => list.Any(item => item.Contains(text));

        MethodInfo methodInfoContains = typeof(string).GetMethod("Contains", new Type[] { typeof(string) });
        MethodInfo methodInfoAny = typeof(Enumerable)
                                        .GetMethods()
                                        .Where(x => x.Name == "Any" amp;amp; x.GetParameters().Count() == 2)
                                        .First()
                                        .MakeGenericMethod(typeof(string));


        //text
        ParameterExpression parameterExpressionText = Expression.Parameter(typeof(string), "text");

        //item
        ParameterExpression parameterExpressionItem = Expression.Parameter(typeof(string), "item");

        //item.Contains(text)
        MethodCallExpression methodCallExpressionContains = Expression.Call(parameterExpressionItem, methodInfoContains, parameterExpressionText);

        // item => item.contains(text)
        Expression<Func<string, bool>> containsLambda = Expression.Lambda<Func<string, bool>>(methodCallExpressionContains, parameterExpressionItem);
        
//I cant call containsLambda.Compile() as text is unknown at this time
            MethodInfo methodInfoCompile =  containsLambda.GetType().GetMethod("Compile", Type.EmptyTypes);
            //(item => item.contains(text)).Compile()
            MethodCallExpression compileMethodCall = Expression.Call(containsLambda, methodInfoCompile); //ERROR

        //list
        ParameterExpression parameterExpressionList = Expression.Parameter(typeof(List<string>), "list");
        
        //list.Any(item => item.Contains(text))
        MethodCallExpression methodCallExpressionAny = Expression.Call(methodInfoAny, parameterExpressionList, compileMethodCall);

        var finalLambda = Expression.Lambda<Func<List<string>, string, bool>>(methodCallExpressionAny, parameterExpressionList, parameterExpressionText);

        List<string> dummyList = new List<string>() { "one" };

        System.Console.WriteLine(finalLambda.Compile()(dummyList, "one"));