从OData到EFcore执行min,max或sum时的例外情况

时间:2017-07-26 12:00:25

标签: c# linq odata entity-framework-core

我有一个简单的项目,当我想从OData获得总和时

http://localhost:31187/api/Northwind/AppEntityType?$apply=aggregate(OptimisticLockField%20with%20max%20as%20maxOLF)

发生异常:

  

“message”:“无法解析表达式'$ it.AsQueryable()':目前不支持方法'System.Linq.Queryable.AsQueryable'的重载。”,   “type”:“System.NotSupportedException”

Remotion.Linq抛出异常。

在使用EFCore的OData中是否真的不支持此功能,或者这是我的错误?

UPD。为了避免这种异常,有必要创建自己的类,代表你的AsQueryableNode;

public class AsQueryableNode : MethodCallExpressionNodeBase
  {
    public static readonly MethodInfo[] SupportedMethods = new[]
                                                       {
                                                           GetSupportedMethod (() => Queryable.AsQueryable<object> (null)),
                                                       };

public AsQueryableNode (MethodCallExpressionParseInfo parseInfo)
    : base(parseInfo)
{
}

public override Expression Resolve (ParameterExpression inputParameter, Expression expressionToBeResolved, ClauseGenerationContext clauseGenerationContext)
{
  // pass on expression to previous node
  return Source.Resolve (inputParameter, expressionToBeResolved, clauseGenerationContext);
}

protected override QueryModel ApplyNodeSpecificSemantics (QueryModel queryModel, ClauseGenerationContext clauseGenerationContext)
{
  // don't change query model
  return queryModel;
}

}

然后你需要在MethodInfoBasedNodeTypeRegistry类中注册AsQueryable方法并解决问题。

0 个答案:

没有答案