В настоящее время я работаю над проектом веб-сервиса в asp.net. И я пытаюсь включить дочерние элементы в свою функцию, которая извлекает данные.Как расширить дочерние уровни дочерних элементов с помощью AutoMapper и OData?
Он работает с URL:
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 может быть объектом «Проект» и 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; }
[...]
}
Надеюсь, вы можете мне помочь.
Duplicate? https://stackoverflow.com/questions/14058485/c-sharp-odata-expand-n-level-with-sub-entities?rq=1 –
@ShaneRay: Я думаю, что нет. Я понимаю систему OData, но я хочу включить ее в свою функцию GetElements. –
Я думаю, вам может понадобиться заменить '/' на '.' В вашей функции. Это означает, что вы передаете 'myChildElement.mySubChildElement' метод' ProjectTo'. Кроме того, это возможно с учетом регистра, поэтому убедитесь, что ваш корпус правильно. –