Я использую LINQ для объектов Entities для Entity Framework на моем уровне доступа к данным.
Моя цель - отфильтровать как можно больше из базы данных, не применяя логику фильтрации к результатам в памяти.
Для этого Business Logic Layer передает предикат уровню доступа к данным.
Я имею в виду
Func<MyEntity, bool>
Итак, если я использую этот предикат напрямую, например
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.Where(x => isMatched(x));
}
Я получаю исключение
[System.NotSupportedException] --- {"Тип узла выражения LINQ" Invoke "не поддерживается в LINQ to Entities."}
Решение в этом вопросе предполагает использовать метод AsExpandable() из библиотеки LINQKit.
Но опять же, используя
public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}
Я получаю исключение
Невозможно передать объект типа "System.Linq.Expressions.FieldExpression" для ввода "System.Linq.Expressions.LambdaExpression"
Есть ли способ использовать предикат в запросе LINQ to Entities для объектов Entity Framework, чтобы он правильно преобразовал его в инструкцию SQL.
Спасибо.