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.Int64ou 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 Doublede .

Les littéraux réels qui utilisent la notation scientifique, comme 4.42372E-30, sont analysés à l’aide System.Doublede .

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 Ordersque 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, , Int32Int64Int16SByte, , UInt16, UInt32, et StringUInt64elle-même uniquement. Char peut être coéché vers et depuis Int32, UInt32, et Stringlui-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é.