Propriété System.Data.Data.DataColumn.Expression
Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.
L’une des utilisations de la Expression propriété consiste à créer des colonnes calculées. Par exemple, pour calculer une valeur fiscale, le prix unitaire est multiplié par un taux d’imposition d’une région spécifique. Étant donné que les taux d’imposition varient d’une région à l’autre, il serait impossible de placer un taux d’imposition unique dans une colonne ; Au lieu de cela, la valeur est calculée à l’aide de la Expression propriété, comme indiqué dans le code suivant :
DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"
Une deuxième utilisation consiste à créer une colonne d’agrégation. Comme pour une valeur calculée, un agrégat effectue une opération en fonction de l’ensemble complet de lignes dans le DataTable. Un exemple simple consiste à compter le nombre de lignes retournées dans le jeu. Il s’agit de la méthode que vous utilisez pour compter le nombre de transactions effectuées par un vendeur particulier, comme indiqué dans le code suivant :
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"
Syntaxe d’expression
Lorsque vous créez une expression, utilisez la ColumnName propriété pour faire référence à des colonnes. Par exemple, si la ColumnName colonne pour une colonne est « UnitPrice » et une autre « Quantity », l’expression est :
"UnitPrice * Quantity"
Remarque
Si une colonne est utilisée dans une expression, l’expression est dite avoir une dépendance sur cette colonne. Si une colonne dépendante est renommée ou supprimée, aucune exception n’est levée. Une exception est levée lorsque la colonne d’expression rompue est accessible.
Lorsque vous créez une expression pour un filtre, placez des chaînes entre guillemets simples :
"LastName = 'Jones'"
Si un nom de colonne contient des caractères non alphanumériques, commence par un chiffre ou correspond (sans respect de la casse) à l’un des mots réservés suivants, il nécessite une gestion spéciale, comme décrit dans les paragraphes suivants.
And
Between
Child
False
In
Is
Like
Not
Null
Or
Parent
True
Si un nom de colonne satisfait à l’une des conditions précédentes, il doit être encapsulé entre crochets ou entre guillemets « » (accent grave). Par exemple, pour utiliser une colonne nommée « Column# » dans une expression, vous devez écrire « [Column#] » ou « 'Column#' » :
Total * [Column#]
Si le nom de colonne est placé entre crochets, les caractères ']' et '\' (mais pas d’autres caractères) doivent être placés dans une séquence d’échappement en les dépréciant avec la barre oblique inverse (« \ »). Si le nom de colonne est placé entre des caractères d’accentuation grave, il ne doit pas contenir de caractères d’accentuation grave. Par exemple, une colonne nommée « Column[]\ » est écrite :
Total * [Column[\]\\]
or
Total * 'Column[]\'
Valeurs définies par l’utilisateur
Les valeurs définies par l’utilisateur peuvent être utilisées dans les expressions à comparer aux valeurs de colonne. Les valeurs de chaîne doivent être placées entre guillemets simples (et chaque guillemet unique d’une valeur de chaîne doit être placé dans une séquence d’échappement en l’ajoutant d’un autre guillemet unique). Les valeurs de date doivent être placées entre signes de livre (#) ou guillemets simples (') en fonction du fournisseur de données. Les décimales et la notation scientifique sont autorisées pour les valeurs numériques. Par exemple :
"FirstName = 'John'"
"Price <= 50.00"
"Birthdate < #1/31/2006#"
Pour les colonnes qui contiennent des valeurs d’énumération, convertissez la valeur en type de données entier. Par exemple :
"EnumColumn = 5"
Analyser les expressions littérales
Toutes les expressions littérales doivent être exprimées dans les paramètres régionaux de culture invariants. Lors DataSet
de l’analyse et de la conversion d’expressions littérales, elle utilise toujours la culture invariante, et non la culture actuelle.
Les littéraux de chaîne sont identifiés lorsqu’il existe des guillemets uniques entourant la valeur. Par exemple : 'John'
.
Boolean
les littéraux sont true
et false
; ils ne sont pas entre guillemets dans les expressions.
Integer
littéraux [+-] ? [0-9]+ sont traités comme System.Int32
, System.Int64
ou System.Double
. System.Double
peut perdre de précision en fonction de la taille du nombre. Par exemple, si le nombre dans le littéral est 2147483650, DataSet
tente d’abord d’analyser le nombre sous la forme d’un Int32
. Cela ne réussira pas, car le nombre est trop grand. Dans ce cas DataSet
, analyse le nombre sous la forme d’un Int64
, qui réussit. Si le littéral est un nombre supérieur à la valeur maximale d’un Int64, DataSet
analyse le littéral à l’aide Double
de .
Les littéraux réels qui utilisent la notation scientifique, comme 4.42372E-30, sont analysés à l’aide System.Double
de .
Les littéraux réels sans notation scientifique, mais avec un point décimal, sont traités comme System.Decimal
. Si le nombre dépasse les valeurs maximales ou minimales prises en charge par System.Decimal
, il est analysé en tant que System.Double
. Par exemple :
- 142526.144524 est converti en .
Decimal
- 345262.78036719560925667 est traité comme un
Double
.
Opérateurs
La concaténation est autorisée à l’aide d’opérateurs Boolean AND, OR et NOT. Vous pouvez utiliser des parenthèses pour regrouper des clauses et forcer la priorité. L’opérateur AND est prioritaire sur d’autres opérateurs. Par exemple :
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Lorsque vous créez des expressions de comparaison, les opérateurs suivants sont autorisés :
- <
- >
- <=
- >=
- =
IN
LIKE
Les opérateurs arithmétiques suivants sont également pris en charge dans les expressions :
- + (addition)
- - (soustraction)
- * (multiplication)
- / (division)
- % (module)
Opérateurs de chaîne
Pour concaténer une chaîne, utilisez le +
caractère. La valeur de la CaseSensitive propriété de la DataSet classe détermine si les comparaisons de chaînes respectent la casse. Toutefois, vous pouvez remplacer cette valeur par la CaseSensitive propriété de la DataTable classe.
Caractères génériques carte
Les caractères et %
les *
caractères peuvent être utilisés de manière interchangeable pour les caractères génériques carte dans une comparaison LIKE. Si la chaîne d’une clause LIKE contient un *
ou %
, ces caractères doivent être placés entre crochets ([]
). Si un crochet se trouve dans la clause, chaque caractère de crochet doit être placé entre crochets (par exemple [[]
ou []]
). Un caractère générique carte est autorisé au début et à la fin d’un modèle, ou à la fin d’un modèle, ou au début d’un modèle. Par exemple :
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
Les caractères génériques carte ne sont pas autorisés au milieu d’une chaîne. Par exemple, 'te*xt'
n’est pas autorisé.
Référencement de relation parent/enfant
Une table parente peut être référencée dans une expression en prepending the column name with Parent
. Par exemple, Parent.Price
fait référence à la colonne de la table parente nommée Price
.
Lorsqu’un enfant a plusieurs lignes parentes, utilisez Parent(RelationName).ColumnName
. Par exemple, Parent(RelationName).Price
fait référence à la colonne de la table parente nommée « Price » via la relation.
Une colonne d’une table enfant peut être référencée dans une expression en prédéfinissant le nom de la colonne avec Child
. Toutefois, étant donné que les relations enfants peuvent retourner plusieurs lignes, vous devez inclure la référence à la colonne enfant dans une fonction d’agrégation. Par exemple, Sum(Child.Price)
retourne la somme de la colonne nommée Price
dans la table enfant.
Si une table a plusieurs enfants, la syntaxe est : Child(RelationName)
. Par exemple, si une table a deux tables enfants nommées Customers
et Orders
que l’objet DataRelation est nommé Customers2Orders
, la référence se présente comme suit :
Avg(Child(Customers2Orders).Quantity)
Agrégats
Les types d’agrégation suivants sont pris en charge :
Sum
(Somme)Avg
(Moyenne)Min
(Minimum)Max
(Maximum)Count
(Nombre)StDev
(Écart type statistique)Var
(Variance statistique)
Les agrégats sont généralement effectués le long des relations. Créez une expression d’agrégation à l’aide de l’une des fonctions répertoriées précédemment et d’une colonne de table enfant comme détaillé dans le référencement des relations parent/enfant. Par exemple :
Avg(Child.Price)
Avg(Child(Orders2Details).Price)
Un agrégat peut également être effectué sur une table unique. Par exemple, pour créer un résumé des chiffres dans une colonne nommée « Price » :
Sum(Price)
Remarque
Si vous utilisez une table unique pour créer un agrégat, aucune fonctionnalité de groupe par groupe n’est proposée. Au lieu de cela, toutes les lignes affichent la même valeur dans la colonne.
Si une table n’a pas de lignes, les fonctions d’agrégation retournent null
.
Les types de données peuvent toujours être déterminés en examinant la DataType propriété d’une colonne. Vous pouvez également convertir des types de données à l’aide de la Convert
fonction, illustrée dans la section suivante.
Un agrégat ne peut être appliqué qu’à une seule colonne et aucune autre expression ne peut être utilisée à l’intérieur de l’agrégat.
Functions
Les fonctions suivantes sont également prises en charge.
CONVERT
Cette fonction convertit une expression en type .NET spécifié.
Convert(expression, type)
Argument | Description |
---|---|
expression |
Expression à convertir. |
type |
Type .NET vers lequel la valeur sera convertie. |
Exemple : myDataColumn.Expression="Convert(total, 'System.Int32')"
Toutes les conversions sont valides avec les exceptions suivantes : Boolean
peuvent être coérées vers et depuis Byte
, , Int32
Int64
Int16
SByte
, , UInt16
, UInt32
, et String
UInt64
elle-même uniquement. Char
peut être coéché vers et depuis Int32
, UInt32
, et String
lui-même uniquement. DateTime
peut être coerclé vers et de lui-même String
uniquement. TimeSpan
peut être coerclé vers et de lui-même String
uniquement.
LEN
Cette fonction obtient la longueur d’une chaîne.
LEN(expression)
Arguments | Description |
---|---|
expression |
Chaîne à évaluer. |
Exemple : myDataColumn.Expression="Len(ItemName)"
ISNULL
Cette fonction case activée une expression et retourne l’expression case activée ou une valeur de remplacement.
ISNULL(expression, replacementvalue)
Arguments | Description |
---|---|
expression |
Expression à case activée. |
replacementvalue |
Si l’expression est null , replacementvalue est retournée. |
Exemple : myDataColumn.Expression="IsNull(price, -1)"
IIF
Cette fonction obtient l’une des deux valeurs en fonction du résultat d’une expression logique.
IIF(expr, truepart, falsepart)
Arguments | Description |
---|---|
expr |
Expression à évaluer. |
truepart |
Valeur à retourner si l’expression a la valeur true. |
falsepart |
Valeur à retourner si l’expression est false. |
Exemple : myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
TRIM
Cette fonction supprime tous les caractères vides de début et de fin tels que \r, \n, \t et ' ' .
TRIM(expression)
Argument | Description |
---|---|
expression |
Expression à découper. |
SUBSTRING
Cette fonction obtient une sous-chaîne d’une longueur spécifiée, en commençant à un point spécifié dans la chaîne.
SUBSTRING(expression, start, length)
Argument | Description |
---|---|
expression |
Chaîne source pour la sous-chaîne |
start |
Entier qui spécifie l’emplacement de démarrage de la sous-chaîne. |
length |
Entier qui spécifie la longueur de la sous-chaîne. |
Exemple : myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
Remarque
Vous pouvez réinitialiser la Expression propriété en lui affectant une valeur Null ou une chaîne vide. Si une valeur par défaut est définie sur la colonne d’expression, toutes les lignes précédemment remplies reçoivent la valeur par défaut après la réinitialisation de la Expression propriété.