Trabalhar com opções de consulta OData

Concluído

O OData permite usar expressões de filtro no URI do OData para limitar os resultados devolvidos, filtrar os resultados em um campo específico, classificar os resultados e assim por diante.

É possível fornecer parâmetros de consulta específicos ao URI do OData. Todos os parâmetros de consulta começam com um cifrão ($). Para começar a especificar parâmetros de consulta, forneça um ponto de interrogação (?) e os diferentes parâmetros de consulta. Os parâmetros de consulta precisam ser separados por um e comercial (&).

Selecionar um subconjunto de campos

Se você deseja recuperar registros usando OData, mas não precisa de todos os campos definidos em um conjunto de registros, use a expressão de filtro $select. Com $Select, você pode especificar os campos que deseja recuperar do conjunto de registros. Tenha cuidado ao usar campos em uma expressão de filtro, pois diferenciam maiúsculas de minúsculas.

No exemplo a seguir, os campos No., Descrição e Preço unitário são selecionados no conjunto de registros do item. O campo de log na frente da palavra-chave selecionar é importante; sem ele, o comando não funcionará.

/Items?$select=No,Description,Unit_Price

Ordenar o conjunto de resultados

Para solicitar o conjunto de resultados, você pode usar a expressão de filtro $OrderBy. Todas as expressões de filtro são executadas no nível do servidor, o que melhorará o desempenho do conjunto de resultados que você recupera com uma chamada OData.

Com a palavra-chave OrderBy, você pode especificar a direção da classificação inserindo asc (para crescente, que é o padrão) ou desc (para decrescente).

No exemplo a seguir, o conjunto de resultados é OrderBy no campo preço unitário. Os campos que você usa na expressão de filtro OrderBy não precisam fazer parte da expressão de filtro SELECT.

/Items?$select=No,Description,Unit_Price&$orderby=Unit_Price desc

Limitar o conjunto de resultados

Para recuperar um número específico de registros, use a expressão de filtro $Top. Essa expressão pode ser usada junto com a expressão de filtro $Skip para obter o próximo número de registros.

No exemplo, os 10 primeiros registros são ignorados e os próximos cinco registros são retornados.

/Items?$select=No,Description,Unit_Price&$top=5&$skip=10

Filtre o conjunto de resultados

Você pode filtrar o conjunto de resultados para recuperar somente os registros nos quais um ou mais campos estão em conformidade com as condições especificadas na expressão de filtro $Filter.

O exemplo a seguir a recuperação de todos os registros em que o estoque é menor que 3000 e a unidade de medida base não é igual a PCS.

/Items?$filter=Inventory lt 3000 and Base_Unit_of_Measure ne 'PCS'

Você pode especificar vários campos usando a palavra-chave e e a palavra-chave ou. Use as expressões a seguir para especificar uma condição:

  • lt - menor que

  • gt - maior que

  • eq - igual

  • ne - diferente

  • le - menor ou igual a

  • ge - maior ou igual a

  • in - parte de um conjunto

A expressão de filtro também pode ser usada em campos FlowFilter. FlowFields que dependem do FlowFilter filtrado serão recalculados.

No exemplo, o campo Location_Filter é um FlowFilter. Esse FlowFilter é usado no cálculo do campo estoque, que é um FlowField.

/Items?$select=No,Inventory$filter=Location_Filter eq 'GREEN'

Filtrar clientes com números 10000, 20000 ou 30000:

$filter=CustomerNo IN ('10000','20000','30000') 

Obter detalhes da linha

Para determinados conjuntos de registros, você pode solicitar detalhes adicionais. No exemplo a seguir, todas as SalesOrders são solicitadas. No entanto, neste exemplo, você deseja recuperar a SalesLines correspondente com a mesma solicitação. Para concluir essa tarefa, use a expressão de filtro $Expand. Se o documento EDM exibir uma NavigationProperty para a sua entidade, você poderá usar o filtro $Expand.

O exemplo a seguir mostra todos as SalesLines correspondentes que estão sendo solicitadas.

/SalesOrders?$expand=SalesOrderSalesLines

Você também pode filtrar o SalesLines usando a expressão de filtro $Filter.

/SalesOrders?$expand=SalesOrderSalesLines($filter=No eq '1920-S')