对于我的例子,我有两个班级
public class Location
{
public int Id { get; set; }
public string Name { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string Address3 { get; set; }
public string Town { get; set; }
public string County { get; set; }
public string CountryCode { get; set; }
}
public class Customer : Location
{
public string BankAccountNumber { get; set; }
public string BankSortCode { get; set; }
}
在我的查询中,我将返回所有位置和客户。
http://localhost:80/odata/Location?select=Id,Name,Town
但是,如果我尝试在客户中选择任何内容(编辑:所以我想要所有位置,但如果位置也是客户,则需要银行帐号),我收到错误。
http://localhost:80/odata/Location?select=Id,Name,Town,BankAccountNumber
"The query specified in the URI is not valid. Could not find a property named 'BankAccountNumber' on type 'MyNamespace.Location'."
有没有办法在继承类型时选择字段而不选择全部?感谢。
答案 0 :(得分:2)
您不仅应该添加类型名称,还应该添加该类型的名称空间。
例如:
http://services.odata.org/TripPinWebApiService/People('russellwhyte')/Trips(1001)/PlanItems/ODataSamples.WebApiService.Models.Flight?$select=StartsAt
Flight类型继承自PlanItem类型。 ODataSamples.WebApiService.Models
是名称空间。
有关派生类型的更多详细信息,如果您发现http://www.odata.org/getting-started/advanced-tutorial/太长而无法阅读,请参阅spec一些实例。
答案 1 :(得分:1)
根据OData.org,有两个选项可用于查询派生类型:
~/Location!Customer/
~/Location/OfType('Customer')
所以你的查询应该是这样的:
http://localhost:80/odata/Location!Customer?select=Id,Name,Town,BankAccountNumber
或
http://localhost:80/odata/Location/OfType('Customer')?select=Id,Name,Town,BankAccountNumber
/编辑: QianLi指出,上面的博客条目是指OData V2。在Odata4中,使用以下语法访问继承的类型:
http://host/service/BaseType/Model.SubType