$ orderBy在odata v4中有重复属性

时间:2015-05-08 12:12:13

标签: c# asp.net duplicates odata asp.net-web-api2

我有以下型号:

public class Field
{
    public string Name { get; set; }
    public int Order { get; set; }

    public int FieldGroupId { get; set; }
}

public class FieldGroup
{
    public string Name { get; set; }
    public int Order { get; set; }

    public virtual ICollection<Field> Field { get; set; }
}

我想要做的是一个查询,我可以先由小组然后按字段订购,例如:

http://localhost:44300/API/odata/IntFieldSet?$count=true&$expand=FieldGroup&$orderby=FieldGroup/Order,Order

然而,当我尝试它时,我收到以下错误:

Duplicate property named 'Order' is not supported in '$orderby'.

虽然它们具有相同的名称,但它们不是同一个字段。如果我按照不同名称的字段或每次只使用其中一个字段进行排序,则可以正常工作。例如:

$orderby=FieldGroup/Order,Name   ||   $orderby=FieldGroup/Order   ||   $orderby=Order

它曾经在odata v3上工作但不再使用odata v4。

之前有人遇到过这个问题。你能帮我找一个解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

我使用WebAPI OData 5.6和5.7有同样的问题。 但是他们说他们在版本WebAPI Odata 5.7中修复了它:https://github.com/OData/WebApi/issues/376 将等待更新的发布。

答案 1 :(得分:0)

现在修好了。 正确的查询应该类似于:

{
  "size": 0,
  "aggs": {
    "count": {
      "nested": {
        "path": "attributes"
      },
      "aggs": {
        "attribCount": {
          "terms": {
            "field": "attributes.name"
          }
        },
        "attribVal": {
          "terms": {
            "field": "attributes.name"
          },
          "aggs": {
            "attribval2": {
              "terms": {
                "field": "attributes.value"
              }
            }
          }
        }
      }
    }
  }
}

将粗略地转化为:

http://localhost:44300/API/odata/IntFieldSet?$count=true&$expand=FieldGroup&$orderby=FieldGroup/Order asc,Order desc

以下是odata.org的一个例子:

http://services.odata.org/TripPinRESTierService/Airports?$的OrderBy =名称%20asc,%20Location /地址%20desc