Entity Framework не поддерживает оператор Expression.Invoke. При попытке его использования возникает следующее исключение:
"The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
У кого-нибудь есть обходной путь для этой недостающей функции? Я хотел бы использовать подробный здесь PredicateBuilder в контексте Entity Framework.
Редактировать 1 @marxidad - мне нравится ваше предложение, однако оно меня несколько сбивает с толку. Не могли бы вы дать дополнительные советы по предлагаемому вами решению?
Редактировать 2 @marxidad - Спасибо за разъяснение.
Да, похоже, что Entity Framework не поддерживает это, и я не могу придумать способ заставить его оценивать так, чтобы это работало.





Платформа Entity преобразует выражения LINQ в деревья команд сущностей, и в них поддерживаются только его канонические функции. Вам придется использовать деревья команд с каноническими функциями, чтобы сделать что-то вроде PredicateBuilder.
PredicateBuilder и LINQKit теперь поддерживают Entity Framework.
Извините, ребята, что не сделали этого раньше!
Ага - теперь работает. Просто добавьте AsExpandable () перед вашим .Where () и готово.
Когда я добавляю AsExpandable (), я получаю сообщение «Невозможно преобразовать объект типа 'System.Linq.Expressions.MemberExpression' в тип 'System.Linq.Expressions.LambdaExpression'». в VisitInvocation в строке LambdaExpression lambda = (LambdaExpression) target;
взгляните на страницу Метод CLR для сопоставления канонических функций в MSDN.