OData v4 упорядочить по множеству свойств - PullRequest
0 голосов
/ 22 марта 2019

У меня есть следующий URL:

{{hostUrl}}/odata/TasksOData?$select=Id,Name,State,TaskRuns,LastChangedAt,LastChangedBy&$expand=TaskRuns($orderby=RunAt desc;$top=1;$select=Status,RunAt,RunBy)&$top=16&$orderby=TaskRuns/RunBy

Я хочу заказать Задачи по свойству из TaskRuns (RunBy).TaskRuns - это коллекция, которую я хочу принять во внимание только первый элемент.

Я получаю сообщение об ошибке: "message": "The parent value for a property access of a property 'RunBy' is not a single value. Property access can only be applied to a single value.",

RunBy - это поле GUID.Та же проблема возникает для RunAt, который является полем DateTime.Я тестировал с другими сценариями и кажется, что проблема в том, что TaskRuns является коллекцией.Следующий URL работает, даже если он занимает больше времени, чем ожидалось:

{{hostUrl}}/odata/TasksOData?$select=Id,Name,State,TaskRuns,LastChangedAt,LastChangedBy&$expand=TaskRuns($orderby=RunAt desc;$top=1;$select=Status),Script($select=Name)&$top=16&$orderby=Script/Name desc

Backend: OData v4, asp core, v7.1.0

Как этого добиться?Спасибо!

1 Ответ

0 голосов
/ 24 марта 2019

Вы почти на месте, $ select можно использовать только для определения свойств верхнего уровня в целевом классе данных, эти свойства могут быть примитивными значениями или сложными типами, но не могут быть свойствами навигации для коллекций или классов, которые были объявленыкак сущности в вашей модели.

Эта ошибка указывает на то, что тип свойства RunBy является типом сущности, а не 'единственным значением.Чтобы вернуть эти свойства, вы должны использовать $expand.

Следующим вопросом, конечно, будет предложение $orderby, по той же причине вам нужно будет указать свойство в RunBy, которое будет использоваться для порядка сортировки, без дополнительной информации о вашей модели, ябудет использовать FIELDNAME в следующем URL-адресе, который должен решить проблему, замените FIELDNAME на правильное поле вашей модели.

Следующий URL-адрес должен решить проблему:

{{hostUrl}}/odata/TasksOData?$select=Id,Name,State,TaskRuns,LastChangedAt,LastChangedBy&$expand=TaskRuns($orderby=RunAt desc;$top=1;$select=Status,RunAt;$expand=RunBy)&$top=16&$orderby=TaskRuns/RunBy/FIELDNAME&$filter=State eq 'Enabled'&$count=true 
...