【发布时间】:2017-02-22 14:42:30
【问题描述】:
我目前正在 asp.net 中开发一个 Web 服务项目。我尝试在检索数据的函数中包含子元素。
它适用于网址:
http://localhost:8080/myEntity/?$expand=myChildElement
但我似乎无法像这样包含以下级别的子元素:
http://localhost:8080/myEntity/?$expand=myChildElement/mySubChildElement
这是我的功能:
public virtual async Task<IHttpActionResult> GetElements(ODataQueryOptions<TEntity> queryOptions)
{
IQueryable<TPoco> query = context.Set<TPoco>();
string[] includes = null;
string includeText = queryOptions.SelectExpand != null ? queryOptions.SelectExpand.RawExpand : null;
if(! string.IsNullOrEmpty(includeText))
{
includes = queryOptions.SelectExpand.RawExpand.Split(',');
return Ok(await query.ProjectTo<TEntity>(null, includes).ToListAsync());
}
return Ok(await query.ProjectTo<TEntity>().ToListAsync());
}
这是我的 TPoco 模型的示例(myChildElement 可以是实体“Project”,mySubChildElement 可以是子实体“ProjectType”):
public class ContractEntity : BaseEntity
{
public ContractEntity()
{
this.Addresses = new HashSet<AddressEntity>();
}
override public Guid Id { get; set; }
override public string DisplayName { get { return No.ToString(); } set { } }
override public string ClassType { get { return "Contract"; } set { } }
override public string MarkerColor { get { return Colors.Green.ToString(); } set { } }
public int? No { get; set; }
public DateTime? OfficialDate { get; set; }
public DateTime? ValidDate { get; set; }
public DateTime? SignatureDate { get; set; }
public Guid? ProjectId { get; set; }
[...]
public virtual ICollection<AccountingItemEntity> AccountingItems { get; set; }
public virtual ICollection<TagEntity> Tags { get; set; }
public virtual ProjectEntity Project { get; set; }
[...]
}
希望你能帮助我。
【问题讨论】:
-
@ShaneRay:我认为不会。我了解 OData 系统,但我想要将其合并到我的函数 GetElements 中。
-
我认为您可能需要将函数中的
/替换为.。这意味着您将myChildElement.mySubChildElement传递给ProjectTo方法。此外,它可能区分大小写,因此请确保您的大小写正确。 -
@ShaneRay:使用
/我有消息:找到了一条遍历多个导航属性的路径。请改写查询,使每个展开路径仅包含类型段和导航属性。。对于.,我收到第二条消息:找不到名为 myChildElement.mySubChildElement 的属性 -
您可以在问题中添加 TPoco 模型吗?
标签: c# asp.net entity-framework-6 odata automapper