Condividi tramite


Filtro dei dati in REST ($filter)

Il filtro restringe i set di dati di grandi dimensioni solo ai record necessari. In REST, Il generatore di API dati supporta un parametro di query ispirato a $filter OData. Ogni filtro viene compilato in SQL con parametri per garantire sicurezza e coerenza.

Sguardo rapido

Operator Meaning
eq uguale
ne diverso da
gt maggiore di
ge maggiore o uguale a
lt minore di
le minore o uguale a
and AND logico
or OR logico
not NOT logico
( ) raggruppamento

eq

Uguale a. Restituisce i record in cui il valore di un campo corrisponde esattamente al valore letterale specificato o null.

In questo esempio si ottengono libri in cui il titolo è uguale 'Dune'a , il flag disponibile è true, il prezzo è 20, la data di pubblicazione è il 1° gennaio 2024 e la classificazione è null.

GET /api/books?$filter=
  title eq 'Dune' and
  available eq true and
  price eq 20 and
  published_on eq 2024-01-01T00:00:00Z and
  rating eq null

Annotazioni

$filter supporta eq null e ne null direttamente per i confronti null.

SQL concettuale

SELECT * FROM Books
WHERE title = 'Dune'
  AND available = 1
  AND price = 20
  AND published_on = '2024-01-01T00:00:00Z'
  AND rating IS NULL;

ne

Non uguale a. Restituisce i record in cui il valore di un campo non corrisponde al valore letterale specificato o non è Null.

In questo esempio si ottengono libri in cui il titolo non 'Foundation'è , il flag disponibile non è false, il prezzo non è zero, la data di pubblicazione non è il 31 dicembre 2023 e la classificazione non è null.

GET /api/books?$filter=
  title ne 'Foundation' and
  available ne false and
  price ne 0 and
  published_on ne 2023-12-31T00:00:00Z and
  rating ne null

Annotazioni

Quando si filtrano in base ai campi date o datetime, usare il formato UTC ISO 8601 senza virgO (yyyy-MM-ddTHH:mm:ssZ). I formati tra virgolette o di tipo OData non sono validi.

  • Errato: $filter=Date ge '2025-01-01'
  • Errato: $filter=Date ge datetime'2025-01-01'
  • Risposta esatta: $filter=Date ge 2025-01-01T00:00:00Z

SQL concettuale

SELECT * FROM Books
WHERE title <> 'Foundation'
  AND available <> 0
  AND price <> 0
  AND published_on <> '2023-12-31T00:00:00Z'
  AND rating IS NOT NULL;

gt

Maggiore. Restituisce i record in cui il valore di un campo è rigorosamente superiore al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo viene ordinato alfabeticamente dopo 'A', il flag disponibile è true, il prezzo è maggiore di 10 e la data di pubblicazione è successiva al 1° gennaio 2020.

GET /api/books?$filter=
  title gt 'A' and
  available gt false and
  price gt 10 and
  published_on gt 2020-01-01T00:00:00Z

SQL concettuale

SELECT * FROM Books
WHERE title > 'A'
  AND available > 0
  AND price > 10
  AND published_on > '2020-01-01T00:00:00Z';

ge

Maggiore o uguale a. Restituisce i record in cui il valore di un campo è maggiore o uguale al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo è 'A' o versione successiva, il flag disponibile è true, il prezzo è almeno 10 e la data di pubblicazione è il 1° gennaio 2020.

GET /api/books?$filter=
  title ge 'A' and
  available ge false and
  price ge 10 and
  published_on ge 2020-01-01T00:00:00Z

SQL concettuale

SELECT * FROM Books
WHERE title >= 'A'
  AND available >= 0
  AND price >= 10
  AND published_on >= '2020-01-01T00:00:00Z';

lt

Meno di. Restituisce i record in cui il valore di un campo è rigorosamente inferiore al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo viene ordinato prima 'Z'di , il flag disponibile è false, il prezzo è minore di 50 e la data di pubblicazione è precedente al 1° gennaio 2030.

GET /api/books?$filter=
  title lt 'Z' and
  available lt true and
  price lt 50 and
  published_on lt 2030-01-01T00:00:00Z

SQL concettuale

SELECT * FROM Books
WHERE title < 'Z'
  AND available < 1
  AND price < 50
  AND published_on < '2030-01-01T00:00:00Z';

le

Minore o uguale a. Restituisce i record in cui il valore di un campo è inferiore o uguale al valore letterale specificato.

In questo esempio si ottengono libri il cui titolo viene ordinato prima o uguale a 'Z', il flag disponibile è true, il prezzo è 100 o minore e la data di pubblicazione è il 1° gennaio 2030.

GET /api/books?$filter=
  title le 'Z' and
  available le true and
  price le 100 and
  published_on le 2030-01-01T00:00:00Z

SQL concettuale

SELECT * FROM Books
WHERE title <= 'Z'
  AND available <= 1
  AND price <= 100
  AND published_on <= '2030-01-01T00:00:00Z';

and

AND logico. Combina più condizioni che devono essere tutte vere affinché un record corrisponda.

In questo esempio si ottengono libri in cui il titolo è 'Dune', il flag disponibile è true, il prezzo è minore di 50, la data di pubblicazione è successiva al 1° gennaio 2020 e la classificazione è null.

GET /api/books?$filter=
  title eq 'Dune' and
  available eq true and
  price lt 50 and
  published_on ge 2020-01-01T00:00:00Z and
  rating eq null

SQL concettuale

SELECT * FROM Books
WHERE title = 'Dune'
  AND available = 1
  AND price < 50
  AND published_on >= '2020-01-01T00:00:00Z'
  AND rating IS NULL;

or

OR logico. Combina le condizioni in cui almeno uno deve essere true affinché un record corrisponda.

In questo esempio si ottengono libri in cui il titolo è 'Dune'o il flag disponibile è true oppure il prezzo è maggiore di 20 oppure la data di pubblicazione è precedente al 1° gennaio 2025 o la classificazione è null.

GET /api/books?$filter=
  title eq 'Dune' or
  available eq true or
  price gt 20 or
  published_on lt 2025-01-01T00:00:00Z or
  rating eq null

SQL concettuale

SELECT * FROM Books
WHERE title = 'Dune'
  OR available = 1
  OR price > 20
  OR published_on < '2025-01-01T00:00:00Z'
  OR rating IS NULL;

not

NOT logico. Nega una condizione in modo che i record vengano restituiti solo se la condizione è false.

In questo esempio si ottengono tutti i libri che non hanno il titolo 'Romance', non sono disponibili, non costano meno di $10, non sono stati pubblicati prima del 1° gennaio 2020 e non hanno una classificazione Null.

GET /api/books?$filter=
  not (
    title eq 'Romance' and
    available eq false and
    price lt 10 and
    published_on lt 2020-01-01T00:00:00Z and
    rating eq null
  )

SQL concettuale

SELECT * FROM Books
WHERE NOT (
  title = 'Romance'
  AND available = 0
  AND price < 10
  AND published_on < '2020-01-01T00:00:00Z'
  AND rating IS NULL
);

( ) raggruppamento

Raggruppa sottoespressioni in modo da poter controllare l'ordine di valutazione in filtri complessi.

In questo esempio si ottengono libri in cui il titolo è 'Fiction' o 'SciFi'e il libro è disponibile o a prezzo inferiore a $25 e la data di pubblicazione è successiva al 1° gennaio 2020 e la classificazione è null.

GET /api/books?$filter=
  (title eq 'Fiction' or title eq 'SciFi') and
  (available eq true or price lt 25) and
  published_on ge 2020-01-01T00:00:00Z and
  rating eq null

SQL concettuale

SELECT * FROM Books
WHERE (title = 'Fiction' OR title = 'SciFi')
  AND (available = 1 OR price < 25)
  AND published_on >= '2020-01-01T00:00:00Z'
  AND rating IS NULL;

Configurazione di esempio

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Vedere anche

Concetto REST GraphQL Scopo
Projection $select Elementi Scegliere i campi da restituire
Filtraggio $filter filtro Limitare le righe per condizione
Ordinamento $orderby orderBy Definire l'ordinamento
Dimensioni pagina $first primo Limitare il numero di elementi per pagina
Continuazione $after dopo Continuare dall'ultima pagina usando un cursore

Annotazioni

Le parole chiave REST iniziano con $, seguendo le convenzioni OData.