Как использовать предикаты в LINQ to Entities для объектов Entity Framework
Я использую LINQ to Entities для объектов Entity Framework в моем уровне доступа к данным.
Моя цель - отфильтровать как можно больше данных из базы данных, не применяя логику фильтрации к результатам в памяти.
Для этой цели уровень бизнес-логики передает предикат уровню доступа к данным.
я имею в виду
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.
Спасибо.