我有以下场景:
public class Stay
{
[Contained]
public Guest PrimaryGuest {get;set;}
}
public abstract class Guest
{
public int ID {get; set;}
}
public class EntityGuest : Guest
{
public string EntityName {get;set;}
}
public class PersonGuest : Guest
{
public string SurName {get;set;}
public string GivenName {get;set;}
}
查询住宿时,我希望通过PersonGuest/SurName订购。
我知道如何按子属性[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/ID
排序,但如何按派生的子属性排序?这可能吗?我无法通过OData文档来确定它——它至少没有为包含的实体调用。
在类似的场景中,这个答案对我帮助很大:oData$expand on Derived Types
基本上,您可以在查询中"强制转换"任何复杂或实体类型的属性,方法是添加正斜杠和模型类型的限定名,使用为模型定义的命名空间,而不是.Net完整类型名。
[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/ModelNamespace.PersonGuest/Surname
如果您不确定模型名称空间,请查看模型生成器代码,或者使用类似的代码:
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "MyAppModel";
然后你的URL应该是这样的:
[URL]/Stays?$expand=PrimaryGuest&$orderby=PrimaryGuest/MyAppModel.PersonGuest/Surname