Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何仅选择OData子元素_C#_Odata - Fatal编程技术网

C# 如何仅选择OData子元素

C# 如何仅选择OData子元素,c#,odata,C#,Odata,我正在构建一个OData应用程序,我正在努力研究如何检索结果并只包含某些(子属性) 首先,让我向您展示在my builder中的注册: builder.EntitySet<AggregatedArticlesSearchModel>("Search").EntityType.HasKey(x => x.Name); 我可以在一个集合中有上千篇文章,因此,通过WebAPI可以获得更多的回报。 由于我不需要在一个请求中包含所有这些属性,所以我想让客户端通过使用?$select参数

我正在构建一个OData应用程序,我正在努力研究如何检索结果并只包含某些(子属性)

首先,让我向您展示在my builder中的注册:

builder.EntitySet<AggregatedArticlesSearchModel>("Search").EntityType.HasKey(x => x.Name);
我可以在一个集合中有上千篇文章,因此,通过WebAPI可以获得更多的回报。 由于我不需要在一个请求中包含所有这些属性,所以我想让客户端通过使用
?$select
参数仅检索子属性,因此客户端可以说,例如:

OData/Search?$select=Values
这里的问题是,例如,我只想返回计数,因此,我认为这样的请求是可能的:

OData/Search?$select=Values/Count
但是,这会导致OData错误:
“URI中指定的查询无效。在select子句中找到了具有多个导航属性的路径或错误的复杂属性路径。请重新编写查询,使select或EXPLAND的每一级别仅包含TypeSegments或属性。”

有人知道如何解决这个问题吗?

@Complexity

我知道,不支持在属性中选择子属性

但是,如果将
occurrenceviewmodel
构建为实体类型,则可以使用嵌套的$select in$expand来满足您的需求

例如:

OData/Search?$select=Values
1) 构建实体类型

builder.EntitySet<OccurenceViewModel>("ViewModels").EntityType.HasKey(x => x.Value);
然后,有效载荷应如下所示:

{
  "@odata.context":"http://localhost/odata/$metadata#Search(Values,Values(Count))","value":[
    {
      "Values":[
        {
          "Count":101.0
        },{
          "Count":102.0
        }
      ]
    },{
      "Values":[
        {
          "Count":101.0
        },{
          "Count":102.0
        }
      ]
    }
  ]
}

希望它能帮助你。谢谢。

谢谢,我会看一看,然后再回来看看它是否工作。现在,支持在$select中嵌套$select。看见
builder.EntitySet<OccurenceViewModel>("ViewModels").EntityType.HasKey(x => x.Value);
GET ~/odata/Search?$select=Values&$expand=Values($select=Count)
{
  "@odata.context":"http://localhost/odata/$metadata#Search(Values,Values(Count))","value":[
    {
      "Values":[
        {
          "Count":101.0
        },{
          "Count":102.0
        }
      ]
    },{
      "Values":[
        {
          "Count":101.0
        },{
          "Count":102.0
        }
      ]
    }
  ]
}