OData в .Net Core 2.2: как получить общее количество элементов? - PullRequest
0 голосов
/ 20 мая 2019

Я создал новое веб-приложение .NET Core 2.2, используя OData v7.1.

Я его запустил и уже могу использовать $ top, $ skip, ...

Сейчас я пытаюсь заставить $ count работать правильно, но я совершенно потерян, как это сделать.

Я уже пробовал переходить по нескольким ссылкам, все они либо нетдольше скомпилировать или не выдавать желаемый результат.

Что у меня есть:

в StartUp.cs

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");

                routes.EnableDependencyInjection();
                routes.Expand().Select().OrderBy().Filter().MaxTop(null).Count();
            });

в моем Класс контроллера:

        [EnableQuery]
        [HttpGet("[action]")]
        public IActionResult All()
        {
            var assets = _service.GetAllAssets();
            return Ok(assets);
        }

Возвращает все активы, и я могу использовать $ top и $ skip без проблем.Теперь, как мне добавить $ count = true или любой другой метод, который позволит мне также вернуть мой общий счетчик?Что я делаю неправильно?

Пример URL-адреса, который работает: http://localhost/api/Assets/All?$top=20&$skip=20

URL-адрес, который не работает: http://localhost/api/Assets/All?$count=true (возвращает все активы)

Текущий результат:

[{Item One}, {Item Two}]

Желаемый результат для меня будет:

[Count : 4, 
 Items: [{Item One}, {Item Two}
]

1 Ответ

0 голосов
/ 20 мая 2019

Вы возвращаете неправильный тип, идите по этому пути:

    [EnableQuery]
    [HttpGet("[action]")]
    public IQueryable<YourType> All()
    {
        var assets = _service.GetAllAssets(); //Where assets is IQueryable
        return assets;
    }

Промежуточное ПО OData сделает отдых за вас.Также в этом подходе, если вы сделаете пропустить / взять / выбрать, это оценивается на уровне SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...