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