Expression.Invoke 在实体框架中?
Posted
技术标签:
【中文标题】Expression.Invoke 在实体框架中?【英文标题】:Expression.Invoke in Entity Framework? 【发布时间】:2008-08-14 00:24:43 【问题描述】:实体框架不支持Expression.Invoke
运算符。尝试使用时收到以下异常:
“LINQ to Entities 不支持 LINQ 表达式节点类型‘Invoke’。
有没有人解决这个缺失的功能?我想在实体框架上下文中使用详细的 PredicateBuilder here。
编辑 1 @marxidad - 我喜欢你的建议,但它确实让我有些困惑。您能否就您提出的解决方案提供进一步的建议?
编辑 2 @marxidad - 感谢您的澄清。
【问题讨论】:
是的,看起来 Entity Framework 不支持这一点,我也无法通过一种可行的方式对其进行评估。 查看 MSDN 上的 CLR Method to Canonical Function Mapping 页面。 【参考方案1】:PredicateBuilder 和 LINQKit 现在支持实体框架。
对不起,伙计们,没有早点这样做!
【讨论】:
是的,现在可以了。只需在 .Where() 之前添加 AsExpandable() 即可。 当我添加 AsExpandable() 时,我收到“无法将类型为 'System.Linq.Expressions.MemberExpression' 的对象转换为类型 'System.Linq.Expressions.LambdaExpression'。”在 LambdaExpression lambda = (LambdaExpression)target; 行的 VisitInvocation【参考方案2】:实体框架将 LINQ 表达式转换为实体命令树,并且在其中仅支持其规范函数。您必须使用带有规范函数的命令树来执行 PredicateBuilder 之类的操作。
【讨论】:
以上是关于Expression.Invoke 在实体框架中?的主要内容,如果未能解决你的问题,请参考以下文章