Proprietà System.Data.DataColumn.Expression

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

Un uso della proprietà consiste nel Expression creare colonne calcolate. Ad esempio, per calcolare un valore fiscale, il prezzo unitario viene moltiplicato per un tasso di imposta di un'area specifica. Poiché le aliquote d'imposta variano da un'area all'altra, sarebbe impossibile inserire una singola aliquota fiscale in una colonna; Il valore viene invece calcolato usando la Expression proprietà , come illustrato nel codice seguente:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

Un secondo utilizzo consiste nel creare una colonna di aggregazione. Analogamente a un valore calcolato, un'aggregazione esegue un'operazione basata sul set completo di righe in DataTable. Un semplice esempio consiste nel contare il numero di righe restituite nel set. Questo è il metodo usato per contare il numero di transazioni completate da un determinato venditore, come illustrato nel codice seguente:

DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"

Sintassi delle espressioni

Quando si crea un'espressione, usare la ColumnName proprietà per fare riferimento alle colonne. Ad esempio, se per ColumnName una colonna è "UnitPrice" e un altro "Quantity", l'espressione è:

"UnitPrice * Quantity"

Nota

Se in un'espressione viene usata una colonna, l'espressione avrà una dipendenza da tale colonna. Se una colonna dipendente viene rinominata o rimossa, non viene generata alcuna eccezione. Verrà generata un'eccezione quando si accede alla colonna dell'espressione ora interrotta.

Quando si crea un'espressione per un filtro, racchiudere le stringhe tra virgolette singole:

"LastName = 'Jones'"

Se un nome di colonna contiene caratteri non alfanumerici, inizia con una cifra o corrisponde (senza distinzione tra maiuscole e minuscole) a una delle parole riservate seguenti, richiede una gestione speciale, come descritto nei paragrafi seguenti.

And

Between

Child

False

In

Is

Like

Not

Null

Or

Parent

True

Se un nome di colonna soddisfa una delle condizioni precedenti, deve essere racchiuso tra parentesi quadre o virgolette "'" (accento grave). Ad esempio, per usare una colonna denominata "Column#" in un'espressione, è necessario scrivere "[Column#]" o "'Column#'":

Total * [Column#]

Se il nome della colonna è racchiuso tra parentesi quadre, tutti i caratteri ']' e '\' (ma non altri caratteri) in esso devono essere preceduti da caratteri di escape anteponendo loro la barra rovesciata ("\"). Se il nome della colonna è racchiuso tra caratteri accentati gravi, non deve contenere caratteri accentati gravi. Ad esempio, una colonna denominata "Column[]\" verrà scritta:

Total * [Column[\]\\]

or

Totale * 'Column[]\'

Valori definiti dall'utente

I valori definiti dall'utente possono essere usati all'interno delle espressioni da confrontare con i valori di colonna. I valori stringa devono essere racchiusi tra virgolette singole e ogni virgoletta singola in un valore stringa deve essere preceduta da un carattere di escape anteponendo un'altra virgoletta singola. I valori di data devono essere racchiusi tra segni di cancelletto (#) o virgolette singole (') in base al provider di dati. I decimali e la notazione scientifica sono consentiti per i valori numerici. Ad esempio:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/2006#"

Per le colonne che contengono valori di enumerazione, eseguire il cast del valore a un tipo di dati Integer. Ad esempio:

"EnumColumn = 5"

Analizzare le espressioni letterali

Tutte le espressioni letterali devono essere espresse nelle impostazioni locali delle impostazioni cultura invarianti. Quando DataSet analizza e converte espressioni letterali, usa sempre le impostazioni cultura invarianti, non le impostazioni cultura correnti.

I valori letterali stringa vengono identificati quando sono presenti virgolette singole che circondano il valore. Ad esempio: 'John'.

Boolean i valori letterali sono true e false, non sono racchiusi tra virgolette nelle espressioni.

Integer valori letterali [+-]? [0-9]+ vengono considerati come System.Int32, System.Int64o System.Double. System.Double può perdere precisione a seconda della grandezza del numero. Ad esempio, se il numero nel valore letterale è 2147483650, DataSet tenterà prima di tutto di analizzare il numero come .Int32 Questa operazione non riesce perché il numero è troppo grande. In questo caso DataSet, analizza il numero come Int64, che avrà esito positivo. Se il valore letterale è un numero maggiore del valore massimo di int64, DataSet analizza il valore letterale usando Double.

I valori letterali reali che usano la notazione scientifica, ad esempio 4.42372E-30, vengono analizzati usando System.Double.

I valori letterali reali senza notazione scientifica, ma con un separatore decimale, vengono considerati come System.Decimal. Se il numero supera i valori massimi o minimi supportati da System.Decimal, viene analizzato come .System.Double Ad esempio:

  • 142526.144524 viene convertito in .Decimal
  • 345262.78036719560925667 viene considerato come .Double

Operatori

La concatenazione è consentita tramite operatori AND, OR e NOT booleani. È possibile usare le parentesi per raggruppare le clausole e forzare la precedenza. L'operatore AND ha la precedenza su altri operatori. Ad esempio:

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

Quando si creano espressioni di confronto, sono consentiti gli operatori seguenti:

  • <
  • >
  • <=
  • >=
  • >
  • =
  • IN
  • LIKE

Nelle espressioni sono supportati anche gli operatori aritmetici seguenti:

  • + (addizione)
  • - (sottrazione)
  • * (moltiplicazione)
  • / (divisione)
  • % (modulo)

Operatori di stringa

Per concatenare una stringa, usare il + carattere . Il valore della CaseSensitive proprietà della DataSet classe determina se i confronti tra stringhe fanno distinzione tra maiuscole e minuscole. Tuttavia, è possibile eseguire l'override di tale valore con la CaseSensitive proprietà della DataTable classe .

Caratteri jolly

Entrambi i * caratteri e % possono essere usati in modo intercambiabile per i caratteri jolly in un confronto LIKE. Se la stringa in una clausola LIKE contiene un * oggetto o %, tali caratteri devono essere racchiusi tra parentesi quadre ([]). Se una parentesi è presente nella clausola , ogni carattere di parentesi quadre deve essere racchiuso tra parentesi quadre (ad esempio [[] o []]). Un carattere jolly è consentito all'inizio e alla fine di un criterio, o alla fine di un criterio o all'inizio di un modello. Ad esempio:

  • "ItemName LIKE '*product*'"
  • "ItemName LIKE '*product'"
  • "ItemName LIKE 'product*'"

I caratteri jolly non sono consentiti al centro di una stringa. Ad esempio, 'te*xt' non è consentito.

Riferimento alla relazione padre/figlio

È possibile fare riferimento a una tabella padre in un'espressione anteponendo il nome della colonna con Parent. Ad esempio, Parent.Price fa riferimento alla colonna della tabella padre denominata Price.

Quando un figlio ha più di una riga padre, usare Parent(RelationName).ColumnName. Ad esempio, Parent(RelationName).Price fa riferimento alla colonna della tabella padre denominata "Price" tramite la relazione .

È possibile fare riferimento a una colonna in una tabella figlio in un'espressione anteponendo il nome della colonna con Child. Tuttavia, poiché le relazioni figlio possono restituire più righe, è necessario includere il riferimento alla colonna figlio in una funzione di aggregazione. Ad esempio, Sum(Child.Price) restituirebbe la somma della colonna denominata Price nella tabella figlio.

Se una tabella contiene più di un elemento figlio, la sintassi è : Child(RelationName). Ad esempio, se una tabella ha due tabelle figlio denominate Customers e Orderse l'oggetto DataRelation è denominato Customers2Orders, il riferimento sarà il seguente:

Avg(Child(Customers2Orders).Quantity)

Aggregazioni

Sono supportati i tipi di aggregazione seguenti:

  • Sum (Somma)
  • Avg (Media)
  • Min (Minimo)
  • Max (Massimo)
  • Count (Conteggio)
  • StDev (Deviazione standard statistica)
  • Var (Varianza statistica)

Le aggregazioni vengono in genere eseguite lungo le relazioni. Creare un'espressione di aggregazione usando una delle funzioni elencate in precedenza e una colonna di tabella figlio, come descritto in Riferimento alle relazioni padre/figlio. Ad esempio:

  • Avg(Child.Price)
  • Avg(Child(Orders2Details).Price)

È anche possibile eseguire un'aggregazione in una singola tabella. Ad esempio, per creare un riepilogo delle figure in una colonna denominata "Price":

Sum(Price)

Nota

Se si usa una singola tabella per creare un'aggregazione, non esisterebbe alcuna funzionalità group-by. Tutte le righe visualizzano invece lo stesso valore nella colonna.

Se una tabella non contiene righe, le funzioni di aggregazione restituiranno null.

I tipi di dati possono essere sempre determinati esaminando la DataType proprietà di una colonna. È anche possibile convertire i tipi di dati usando la Convert funzione , illustrata nella sezione seguente.

Un'aggregazione può essere applicata solo a una singola colonna e non è possibile usare altre espressioni all'interno dell'aggregazione.

Funzioni

Sono supportate anche le funzioni seguenti.

CONVERT

Questa funzione converte un'espressione in un tipo .NET specificato.

Convert(expression, type)
Argomento Descrizione
expression Espressione da convertire.
type Tipo .NET in cui verrà convertito il valore.

Esempio: myDataColumn.Expression="Convert(total, 'System.Int32')"

Tutte le conversioni sono valide con le eccezioni seguenti: Boolean possono essere forzate in e solo da Byte, SByte, Int16UInt16Int64UInt32Int32, UInt64, String e . Char può essere coercito a e solo da Int32, UInt32, Stringe . DateTime può essere coercito a e da String e solo. TimeSpan può essere coercito a e da String e solo.

LEN

Questa funzione ottiene la lunghezza di una stringa.

LEN(expression)
Argomenti Descrizione
expression Stringa da valutare.

Esempio: myDataColumn.Expression="Len(ItemName)"

ISNULL

Questa funzione controlla un'espressione e restituisce l'espressione selezionata o un valore di sostituzione.

ISNULL(expression, replacementvalue)
Argomenti Descrizione
expression Espressione da controllare.
replacementvalue Se expression è null, replacementvalue viene restituito .

Esempio: myDataColumn.Expression="IsNull(price, -1)"

IIF

Questa funzione ottiene uno dei due valori a seconda del risultato di un'espressione logica.

IIF(expr, truepart, falsepart)
Argomenti Descrizione
expr Espressione da valutare.
truepart Valore da restituire se l'espressione è true.
falsepart Valore da restituire se l'espressione è false.

Esempio: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

Questa funzione rimuove tutti i caratteri vuoti iniziali e finali, ad esempio \r, \n, \t e '.

TRIM(expression)
Argomento Descrizione
expression Espressione da tagliare.

SUBSTRING

Questa funzione ottiene una sottostringa di una lunghezza specificata, a partire da un punto specificato nella stringa.

SUBSTRING(expression, start, length)
Argomento Descrizione
expression Stringa di origine per la sottostringa
start Intero che specifica dove inizia la sottostringa.
length Integer che specifica la lunghezza della sottostringa.

Esempio: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Nota

È possibile reimpostare la Expression proprietà assegnando un valore Null o una stringa vuota. Se nella colonna dell'espressione è impostato un valore predefinito, a tutte le righe compilate in precedenza viene assegnato il valore predefinito dopo la reimpostazione della Expression proprietà.