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.Int64
o 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 Orders
e 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
, Int16
UInt16
Int64
UInt32
Int32
, UInt64
, String
e . Char
può essere coercito a e solo da Int32
, UInt32
, String
e . 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à.