Condividi tramite


Risoluzione dell'overload delle funzioni (Entity SQL)

In questo argomento viene descritto come vengono risolte le funzioni Entity SQL.

È possibile definire più funzioni con lo stesso nome, purché le funzioni abbiano firme univoche.

In questo caso, è necessario applicare i criteri seguenti per determinare a quale funzione fa riferimento una determinata espressione. Questi criteri vengono applicati in sequenza. Il primo criterio che si applica solo a una singola funzione è la funzione risolta.

  1. Numero di parametro. La funzione ha lo stesso numero di parametri specificati nell'espressione.

  2. Corrispondenza esatta sul tipo. Ogni tipo di argomento della funzione corrisponde esattamente al tipo di parametro o è il valore letterale Null.

  3. Corrispondenza nel sottotipo. Ogni tipo di argomento della funzione corrisponde esattamente o è un sottotipo del tipo di parametro oppure l'argomento è il valore letterale Null. Nel caso in cui diverse funzioni differiscano solo nel numero di conversioni di sottotipo necessarie, la funzione con il minor numero di conversioni di sottotipi è la funzione risolta.

  4. Corrispondenza con sottotipo o promozione del tipo. Ogni tipo di argomento della funzione corrisponde esattamente, è un sottotipo di oppure può essere alzato di livello al tipo di parametro oppure l'argomento è il valore letterale Null. Anche in questo caso, nel caso in cui diverse funzioni differiscano solo nel numero di conversioni e promozioni di sottotipi, la funzione con il minor numero di conversioni e promozioni di sottotipi è la funzione risolta.

Se nessuno di questi criteri comporta l'selezione di una singola funzione, l'espressione di chiamata della funzione è ambigua.

Anche se una singola funzione può essere estratta usando queste regole, gli argomenti potrebbero comunque non corrispondere ai parametri. In questo caso viene generato un errore.

Per le funzioni definite dall'utente, la definizione di una funzione di query inline ha la precedenza anche quando esiste una funzione definita dal modello con una firma che rappresenta una corrispondenza migliore per la funzione definita dall'utente.

Vedere anche