Я пытаюсь оценить func<T, bool>
с EF.Functions.Like
в CSharpScript.EvaluateAsync
, но у меня возникает ошибка во время выполнения (имя «EF» не существует в текущем контексте) при вызове метода GetPredicate()
.
Создать функциональный метод:
public static class Helper
{
public static async Task<Func<T, bool>> GetPredicate<T>(string stringExpression)
{
ScriptOptions options = ScriptOptions.Default.AddReferences(references: typeof(T).Assembly);
Func<T, bool> discountFilterExpression = await CSharpScript.EvaluateAsync<Func<T, bool>>(stringExpression, options);
return discountFilterExpression;
}
}
Метод вызова:
string expString = "x => EF.Functions.Like(x.CodeId, pattern) || EF.Functions.Like(x.Name, pattern) || EF.Functions.Like(x.CategoryId, pattern)";
Func<MyClass, bool> exp = await Helper.GetPredicate<MyClass>(expString);
Как это сделать?
EF.Functions
обычно не должны оцениваться.
Но чтобы ответить на ваш конкретный вопрос, вам нужно добавить как ссылка к Microsoft.EntityFrameworkCore
сборка, так и импорт (using
) к Microsoft.EntityFrameworkCore
пространство имен, например.
ScriptOptions options = ScriptOptions.Default
.AddReferences(references: typeof(T).Assembly)
.AddReferences(typeof(EF).Assembly) // <--
.AddImports(typeof(EF).Namespace); // <--