【问题标题】:OData query fails when combining all and any组合 all 和 any 时 OData 查询失败
【发布时间】:2014-03-15 05:04:31
【问题描述】:

我正在使用 Microsoft 的 OData Api v3 并尝试成功获取以下查询:

Posts?$filter=(ReferredFrom/any(it: (it/ReferenceType/Description/Name eq 'Part')) and RefersTo/all(it: (it/ReferenceType/Description/Name ne 'Child')))

所以它基本上由两个all/anyand 链接的查询文件器组成:

ReferredFrom/any(it: (it/ReferenceType/Description/Name eq 'Part'))
RefersTo/all(it: (it/ReferenceType/Description/Name ne 'Child')))

虽然这两个查询部分各自工作得很好,但当我将它们组合起来时出现错误,如上所示。不幸的是,我收到了ArgumentNullException。有谁知道问题出在哪里?类似的查询适用于 OData 演示服务。

你好,bloxx

这是确切的响应:

{
  "odata.error":{
    "code":"","message":{
      "lang":"en-US","value":"Fehler"
    },"innererror":{
      "message":"Der Wert darf nicht NULL sein.\r\nParametername: parameter","type":"System.ArgumentNullException","stacktrace":"   bei System.Web.Http.ApiController.<InvokeActionWithExceptionFilters>d__1.MoveNext()\r\n--- Ende der Stapel\u00fcberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgel\u00f6st wurde ---\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   bei System.Web.Http.Tracing.Tracers.HttpControllerTracer.<ExecuteAsyncCore>d__5.MoveNext()\r\n--- Ende der Stapel\u00fcberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgel\u00f6st wurde ---\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   bei System.Web.Http.Tracing.ITraceWriterExtensions.<TraceBeginEndAsyncCore>d__21`1.MoveNext()\r\n--- Ende der Stapel\u00fcberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgel\u00f6st wurde ---\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n   bei System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n   bei System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()"
    }
  }
}

【问题讨论】:

  • 不确定,但试试这个:Posts?$filter=ReferredFrom/any(from: from/ReferenceType/Description/Name eq 'Part') 和 RefersTo/all(to: to/ReferenceType/Description /命名 ne '孩子')
  • 非常感谢,你解决了我的问题:)

标签: odata


【解决方案1】:
Posts?$filter=ReferredFrom/any(from: from/ReferenceType/Description/Name eq 'Part') and RefersTo/all(to: to/ReferenceType/Description/Name ne 'Child') 

http://www.odata.org/2012/05/odata-v3-demo-services/

作为建议,永远不要使用相同的变量,而是更好地对每个变量进行分类:

而不是它,它 - 执行 fromto。在你的情况下。更容易阅读

【讨论】:

    猜你喜欢
    • 2013-03-06
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多