Создайте ODataQueryOptions программно - PullRequest
0 голосов
/ 05 октября 2018

Мой API в настоящее время имеет некоторые конечные точки OData, которые используют универсальные ODataQueryOptions для получения запроса OData ...

[HttpGet]
[Route("search")]
public object Search(ODataQueryOptions<MySearchableEntity> options)
{
    return searchService.Search(options);
}

searchService, затем пересекает Expression из options.Filter.FilterClause для создания пользовательского запроса SQL,Он выполняет аналогичные функции для параметров order, top и skip.

Это все работает нормально, но теперь мне нужно это для анализа запроса для динамического типа.

Можно ли программно построить EdmModel, IEdmType и т. Д. Для ODataQueryContext, не имея «реального» типа CLR для его резервного копирования?

«Тип» четко определен тем, что у нас есть классы, описывающие его форму, но он не существует как тип CLR.

1 Ответ

0 голосов
/ 08 октября 2018

Отвечая на мой собственный вопрос, поскольку я нашел ответ.

ODataQueryContext, который используется для проверки запроса, принимает Type, но существует перегрузка, которая принимает IEdmType, которыйв свою очередь это может быть EdmModel, который очень легко построить множеством разных способов.

Документы здесь:

http://odata.github.io/WebApi/02-01-model-builder-abstract/

http://odata.github.io/WebApi/02-02-model-builder-untyped/

http://odata.github.io/WebApi/02-03-model-builder-nonconvention/

http://odata.github.io/WebApi/02-04-convention-model-builder/

...