OData основан на модели EDM, которая не поддерживает упорядоченные коллекции (ар лучи). Таким образом, нет встроенного синтаксиса для фильтрации по положению.
Если ваша цель состоит в том, чтобы отфильтровать по умолчанию Growth/Value
с использованием значения, предоставленного клиентом, вы можете достичь этого с помощью функции OData. Объявите функцию в конфигурации вашего веб-API.
// builder is an instance of ODataConventionModelBuilder
var defaultGrowthValueFunction = builder.EntityType<Zebra>().Collection.Function("WhereGrowthEquals");
defaultGrowthValueFunction.Parameter<decimal>("value");
defaultGrowthValueFunction.ReturnsCollectionFromEntitySet<Zebra>("Zebras");
Функция называется WhereGrowthEquals
и он связан с множеством Zebras
сущностей. (Я изобрел тип объекта с именем Zebra
для размещения массива Proposals
из приведенного выше примера.)
Теперь определите функцию в ZebrasController
. (Для тестирования, я определил статический список Zebra
экземпляров под названием AllZebras
.)
public class ZebrasController : ODataController
{
[HttpGet]
[ODataRoute("Zebras/Default.WhereGrowthEquals(value={value})")]
public IHttpActionResult WhereGrowthEquals(decimal value)
{
return this.Ok(AllZebras.Where(z => z.Proposals[0].Growth.Value == value));
}
}
Обратите внимание, что связанная функция пространства имен, в атрибуте ODataRoute. (Default
- это имя пространства имен по умолчанию.)
Наконец, вызовите функцию от клиента следующим образом.
GET http://hostname/Zebras/Default.WhereGrowthEquals(value=0.05)
Благодарим за подробный ответ. На самом деле мне нужно выразить запрос фильтра в общем виде, я не могу реализовать определенную фильтрацию на стороне сервера. Я имею в виду, что запросы должны генерироваться сеткой клиента в зависимости от показанных столбцов, а эти столбцы представляют собой проекцию сложных объектов (включая массивы). Я мог бы иметь еще один столбец, ссылающийся на путь, подобный предложениям [1]. Другой экземпляр [2] .Amount.Value. Итак, я ищу стандартный и общий syntaxt для выражения этого пути в запросе OData. – enenkey
Хммм. Мне любопытно, как вы моделируете массивы. Как выглядит ваш документ с метаданными $? – lencharest