У меня есть проект app app, который использует данные с помощью odata, но у меня возникают некоторые проблемы с odata wep api.
когда я выполняю этот запрос
/api/values? $top = 50 & $filter = Комментарии /Fortuneteller/FullName eq 'some string'
это дает мне следующую ошибку
"Сообщение": "Запрос, указанный в URI, недействителен.", "ExceptionMessage": "Родительское значение для доступа к свойствам свойства" Fortuneteller "не является единственным значением. Доступ к свойствам может применяться только к одному значению."
Я не хочу возвращать объект объекта из контроллера. Есть ли способ фильтрации объекта через DTO?
Я использую шаблон Repository + Service layer в моем проекте, и структура моего проекта похожа на
api controller ↔ service ↔ репозиторий ↔ EF
контроллер api
[Queryable]
public IQueryable<FortuneDTO> Get()
{
return service.FiterBy((_ => true));
}
услуги
public IQueryable<FortuneDTO> FiterBy(Expression<Func<tblFortune, bool>> filter)
{
return repository.List().Where(filter).Select(_ => new FortuneDTO
{
CreatedByFullName = _.aspnet_Users.FullName,
Id = _.FortuneId,
Comments = _.tblComment.Select(c => new CommentDTO
{
Id=c.CommentId,
Comment = c.Comment,
Fortuneteller = new FortunetellerDTO {
FullName=c.aspnet_Users.FullName,
Id=c.aspnet_Users.UserId
}
}).AsQueryable()
});
}
репозиторий
public virtual IQueryable<TEntity> List()
{
return context.CreateObjectSet<TEntity>();
}
DTO-х
public class FortuneDTO
{
public int Id { get; set; }
public string CreatedByFullName { get; set; }
public IQueryable<CommentDTO> Comments { get; set; }
}
public class CommentDTO
{
public int Id { get; set; }
public string Comment { get; set; }
public FortunetellerDTO Fortuneteller { get; set; }
}
public class FortunetellerDTO
{
public Guid Id { get; set; }
public string FullName { get; set; }
}