Expression.Invoke в Entity Framework?

Entity Framework не поддерживает оператор Expression.Invoke. При попытке его использования возникает следующее исключение:

«Тип узла выражения LINQ« Invoke »не поддерживается в LINQ to Entities.

У кого-нибудь есть обходной путь для этой недостающей функции? Я хотел бы использовать PredicateBuilder, подробно описанный здесь в контексте Entity Framework.

Редактировать 1 @marxidad - мне нравится ваше предложение, но оно меня несколько сбивает с толку. Не могли бы вы дать дополнительные советы по предлагаемому вами решению?

Редактировать 2 @marxidad - Спасибо за разъяснения.


person Brad Leach    schedule 14.08.2008    source источник
comment
Да, похоже, что Entity Framework не поддерживает это, и я не могу придумать способ заставить его оценивать так, чтобы это работало.   -  person Darren Kopp    schedule 15.08.2008
comment
взгляните на страницу метода CLR для сопоставления канонических функций в MSDN .   -  person Mark Cidade    schedule 19.08.2008


Ответы (2)


PredicateBuilder и LINQKit теперь поддерживает Entity Framework.

Простите, ребята, что не сделали этого раньше!

person Joe Albahari    schedule 05.04.2009
comment
Ага - теперь работает. Просто добавьте AsExpandable () перед вашим .Where ‹› () и все готово. - person Merritt; 23.06.2009
comment
Когда я добавляю AsExpandable (), я получаю сообщение Unable to cast object of type 'System.Linq.Expressions.MemberExpression' к типу 'System.Linq.Expressions.LambdaExpression'. в VisitInvocation в строке LambdaExpression lambda = (LambdaExpression) target; - person mikemurf22; 14.03.2011

Платформа Entity преобразует выражения LINQ в деревья команд сущностей, и в них поддерживаются только его канонические функции. Вам придется использовать деревья команд с каноническими функциями, чтобы сделать что-то вроде PredicateBuilder.

person Mark Cidade    schedule 17.08.2008