System.Data.DataColumn.Expression-Eigenschaft
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Eine Verwendung der Expression Eigenschaft besteht darin, berechnete Spalten zu erstellen. Um beispielsweise einen Steuerwert zu berechnen, wird der Einzelpreis mit einem Steuersatz einer bestimmten Region multipliziert. Da die Steuersätze von Region zu Region variieren, wäre es unmöglich, einen einzigen Steuersatz in eine Spalte zu setzen; Stattdessen wird der Wert mithilfe der Expression Eigenschaft berechnet, wie im folgenden Code dargestellt:
DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"
Eine zweite Verwendung besteht darin, eine Aggregatspalte zu erstellen. Ähnlich wie bei einem berechneten Wert führt ein Aggregat einen Vorgang basierend auf dem vollständigen Satz von Zeilen in der DataTable. Ein einfaches Beispiel besteht darin, die Anzahl der in der Gruppe zurückgegebenen Zeilen zu zählen. Dies ist die Methode, die Sie verwenden würden, um die Anzahl der Transaktionen zu zählen, die von einem bestimmten Verkäufer abgeschlossen wurden, wie im folgenden Code gezeigt:
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"
Ausdruckssyntax
Wenn Sie einen Ausdruck erstellen, verwenden Sie die ColumnName Eigenschaft, um auf Spalten zu verweisen. Wenn z. B. für ColumnName eine Spalte "UnitPrice" und ein weiterer "Quantity" lautet, lautet der Ausdruck:
"UnitPrice * Quantity"
Hinweis
Wenn eine Spalte in einem Ausdruck verwendet wird, wird der Ausdruck als Abhängigkeit von dieser Spalte bezeichnet. Wenn eine abhängige Spalte umbenannt oder entfernt wird, wird keine Ausnahme ausgelöst. Eine Ausnahme wird ausgelöst, wenn auf die jetzt fehlerhafte Ausdrucksspalte zugegriffen wird.
Wenn Sie einen Ausdruck für einen Filter erstellen, schließen Sie Zeichenfolgen mit einfachen Anführungszeichen ein:
"LastName = 'Jones'"
Wenn ein Spaltenname nicht alphanumerische Zeichen enthält, mit einer Ziffer beginnt oder mit einem der folgenden reservierten Wörter übereinstimmt (groß-/kleinschreibung nicht beachtet), ist eine spezielle Behandlung erforderlich, wie in den folgenden Absätzen beschrieben.
And
Between
Child
False
In
Is
Like
Not
Null
Or
Parent
True
Wenn ein Spaltenname eine der vorherigen Bedingungen erfüllt, muss er in eckige Klammern oder "'" (Graviszeichen) umschlossen werden. Wenn Sie beispielsweise eine Spalte namens "Column#" in einem Ausdruck verwenden möchten, schreiben Sie entweder "[Spalte#]" oder "'Spalte#'":
Total * [Column#]
Wenn der Spaltenname in eckige Klammern eingeschlossen ist, müssen alle Zeichen "]" und "\" (aber keine anderen Zeichen) darin durch Vorausstehend mit dem umgekehrten Schrägstrich ("\") escapet werden. Wenn der Spaltenname in Graviszeichen eingeschlossen ist, darf er keine Graviszeichen enthalten. Beispielsweise würde eine Spalte mit dem Namen "Column[]\" geschrieben werden:
Total * [Column[\]\\]
oder
Summe * 'Spalte[]\'
Benutzerdefinierte Werte
Benutzerdefinierte Werte können in Ausdrücken verwendet werden, um mit Spaltenwerten verglichen zu werden. Zeichenfolgenwerte sollten in einfache Anführungszeichen eingeschlossen werden (und jedes einzelne Anführungszeichen in einem Zeichenfolgenwert muss durch Voranstellen mit einem anderen einfachen Anführungszeichen escapet werden). Datumswerte sollten auf der Grundlage des Datenanbieters in Nummernzeichen (#) oder einfache Anführungszeichen (') eingeschlossen werden. Dezimalstellen und wissenschaftliche Schreibweise sind für numerische Werte zulässig. Beispiel:
"FirstName = 'John'"
"Price <= 50.00"
"Birthdate < #1/31/2006#"
Wandeln Sie den Wert für Spalten, die Enumerationswerte enthalten, in einen ganzzahligen Datentyp um. Beispiel:
"EnumColumn = 5"
Analysieren von Literalausdrücken
Alle Literalausdrücke müssen im invarianten Kulturgebietsschema ausgedrückt werden. Wenn DataSet
Literalausdrücke analysiert und konvertiert werden, verwendet sie immer die invariante Kultur, nicht die aktuelle Kultur.
Zeichenfolgenliterale werden identifiziert, wenn einzelne Anführungszeichen um den Wert herum vorhanden sind. Beispiel: 'John'
.
Boolean
Literale sind true
und false
; sie werden in Ausdrücken nicht zitiert.
Integer
Literale [+-]? [0-9]+ werden als System.Int32
, System.Int64
oder System.Double
. System.Double
kann die Genauigkeit je nach Größe der Zahl verlieren. Wenn die Zahl im Literal z. B. 2147483650 ist, wird zuerst versucht, DataSet
die Zahl als eine Int32
zu analysieren. Dies ist nicht erfolgreich, da die Zahl zu groß ist. In diesem Fall DataSet
analysiert die Zahl als Int64
eine , die erfolgreich ist. Wenn das Literal eine Zahl ist, die größer als der Maximalwert eines Int64 ist, DataSet
analysiert das Literal mit Double
.
Reale Literale, die wissenschaftliche Schreibweise verwenden, z. B. 42372E-30, werden mit System.Double
analysiert.
Reale Literale ohne wissenschaftliche Schreibweise, aber mit einem Dezimalkomma werden als System.Decimal
behandelt. Wenn die Zahl die maximal oder minimalen Werte überschreitet, die von System.Decimal
unterstützt werden, wird sie als analysiert.System.Double> Beispiel:
- 142526.144524 wird in ein
Decimal
. - 345262.78036719560925667 wird als eine
Double
behandelt.
Operatoren
Verkettung ist mit booleschen OPERATOREN UND, OR und NOT zulässig. Sie können Klammern verwenden, um Klauseln zu gruppieren und Vorrang zu erzwingen. Der AND-Operator hat Vorrang vor anderen Operatoren. Beispiel:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Wenn Sie Vergleichsausdrücke erstellen, sind die folgenden Operatoren zulässig:
- <
- >
- <=
- >=
- =
IN
LIKE
Die folgenden arithmetischen Operatoren werden auch in Ausdrücken unterstützt:
- + (Addition)
- - (Subtraktion)
- * (Multiplikation)
- / (Division)
- % (Modulus)
Zeichenfolgenoperatoren
Verwenden Sie das +
Zeichen, um eine Zeichenfolge zu verketten. Der Wert der CaseSensitive Eigenschaft der DataSet Klasse bestimmt, ob Zeichenfolgenvergleiche bei Groß-/Kleinschreibung beachtet werden. Sie können diesen Wert jedoch mit der CaseSensitive Eigenschaft der DataTable Klasse überschreiben.
Wild Karte Zeichen
Sowohl die Zeichen als %
auch die *
Zeichen können austauschbar für Wild Karte Zeichen in einem LIKE-Vergleich verwendet werden. Enthält die Zeichenfolge in einer LIKE-Klausel ein *
oder %
, sollten diese Zeichen in Klammern ([]
) eingeschlossen werden. Wenn sich eine Klammer in der Klausel befindet, sollte jedes eckige Zeichen in eckige Klammern (z. B [[]
. oder []]
) eingeschlossen werden. Ein Wild Karte ist am Anfang und Ende eines Musters oder am Ende eines Musters oder am Anfang eines Musters zulässig. Beispiel:
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
Wild Karte Zeichen sind in der Mitte einer Zeichenfolge nicht zulässig. 'te*xt'
ist beispielsweise nicht zulässig.
Bezug zwischen übergeordneten und untergeordneten Elementen
Auf eine übergeordnete Tabelle kann in einem Ausdruck verwiesen werden, indem der Spaltenname vorausgestellt ist.Parent
Verweist beispielsweise Parent.Price
auf die Spalte der übergeordneten Tabelle mit dem Namen Price
.
Wenn ein untergeordnetes Element mehr als eine übergeordnete Zeile hat, verwenden Sie Parent(RelationName).ColumnName
. Verweist beispielsweise Parent(RelationName).Price
auf die Spalte der übergeordneten Tabelle mit dem Namen "Preis" über die Beziehung.
Auf eine Spalte in einer untergeordneten Tabelle kann in einem Ausdruck verwiesen werden, indem der Spaltenname voraussteht.Child
Da untergeordnete Beziehungen jedoch mehrere Zeilen zurückgeben können, müssen Sie den Verweis auf die untergeordnete Spalte in eine Aggregatfunktion einschließen. Beispielsweise würde die Summe der Spalte zurückgegeben, Sum(Child.Price)
die in der untergeordneten Tabelle benannt ist Price
.
Wenn eine Tabelle mehrere untergeordnete Elemente enthält, lautet die Syntax: Child(RelationName)
. Wenn eine Tabelle z. B. zwei untergeordnete Tabellen benannt Customers
hat und Orders
das DataRelation Objekt benannt Customers2Orders
ist, lautet der Verweis wie folgt:
Avg(Child(Customers2Orders).Quantity)
Aggregate
Die folgenden Aggregattypen werden unterstützt:
Sum
(Summe)Avg
(Mittelwert)Min
(Minimum)Max
(Maximal)Count
(Anzahl)StDev
(Statistische Standardabweichung)Var
(Statistische Varianz)
Aggregate werden in der Regel entlang von Beziehungen ausgeführt. Erstellen Sie einen Aggregatausdruck mithilfe einer der oben aufgeführten Funktionen und einer untergeordneten Tabellenspalte, wie in bezug auf die Beziehung "Parent/Child" beschrieben. Beispiel:
Avg(Child.Price)
Avg(Child(Orders2Details).Price)
Ein Aggregat kann auch für eine einzelne Tabelle ausgeführt werden. So erstellen Sie beispielsweise eine Zusammenfassung der Zahlen in einer Spalte mit dem Namen "Preis":
Sum(Price)
Hinweis
Wenn Sie eine einzelne Tabelle verwenden, um ein Aggregat zu erstellen, gibt es keine Funktionalität nach Gruppieren. Stattdessen würden alle Zeilen denselben Wert in der Spalte anzeigen.
Wenn eine Tabelle keine Zeilen enthält, werden die Aggregatfunktionen zurückgegeben null
.
Datentypen können immer durch Untersuchen der DataType Eigenschaft einer Spalte bestimmt werden. Sie können Datentypen auch mithilfe der Convert
Funktion konvertieren, die im folgenden Abschnitt gezeigt wird.
Ein Aggregat kann nur auf eine einzelne Spalte angewendet werden, und es können keine anderen Ausdrücke innerhalb des Aggregats verwendet werden.
Functions
Die folgenden Funktionen werden ebenfalls unterstützt.
CONVERT
Diese Funktion konvertiert einen Ausdruck in einen angegebenen .NET-Typ.
Convert(expression, type)
Argument | Beschreibung |
---|---|
expression |
Der zu konvertierende -Ausdruck. |
type |
.NET-Typ, in den der Wert konvertiert wird. |
Beispiel: myDataColumn.Expression="Convert(total, 'System.Int32')"
Alle Konvertierungen sind mit den folgenden Ausnahmen gültig: Boolean
Kann nur in und von Byte
, SByte
, Int16
, Int32
, Int64
UInt32
UInt16
, UInt64
und String
sich selbst umgewandelt werden. Char
kann nur in und von Int32
, UInt32
, String
und sich selbst umgewandelt werden. DateTime
kann nur zu und von String
sich selbst umgewandelt werden. TimeSpan
kann nur zu und von String
sich selbst umgewandelt werden.
LEN
Diese Funktion ruft die Länge einer Zeichenfolge ab.
LEN(expression)
Argumente | Beschreibung |
---|---|
expression |
Die zu bewertende Zeichenfolge. |
Beispiel: myDataColumn.Expression="Len(ItemName)"
ISNULL
Diese Funktion überprüft einen Ausdruck und gibt entweder den überprüften Ausdruck oder einen Ersatzwert zurück.
ISNULL(expression, replacementvalue)
Argumente | Beschreibung |
---|---|
expression |
Der zu überprüfende Ausdruck. |
replacementvalue |
Wenn Ausdruck ist null , replacementvalue wird zurückgegeben. |
Beispiel: myDataColumn.Expression="IsNull(price, -1)"
IIF
Diese Funktion ruft je nach Ergebnis eines logischen Ausdrucks einen von zwei Werten ab.
IIF(expr, truepart, falsepart)
Argumente | Beschreibung |
---|---|
expr |
Der auszuwertende Ausdruck. |
truepart |
Der Wert, der zurückgegeben werden soll, wenn der Ausdruck "true" ist. |
falsepart |
Der Wert, der zurückgegeben werden soll, wenn der Ausdruck falsch ist. |
Beispiel: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
TRIM
Diese Funktion entfernt alle führenden und nachfolgenden leeren Zeichen wie \r, \n, \t und ' '.
TRIM(expression)
Argument | Beschreibung |
---|---|
expression |
Der zu kürzende Ausdruck. |
SUBSTRING
Diese Funktion ruft eine Teilzeichenfolge einer angegebenen Länge ab, beginnend mit einem angegebenen Punkt in der Zeichenfolge.
SUBSTRING(expression, start, length)
Argument | Beschreibung |
---|---|
expression |
Die Quellzeichenfolge für die Teilzeichenfolge |
start |
Ganze Zahl, die angibt, wo die Teilzeichenfolge beginnt. |
length |
Ganze Zahl, die die Länge der Teilzeichenfolge angibt. |
Beispiel: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
Hinweis
Sie können die Expression Eigenschaft zurücksetzen, indem Sie sie einem Nullwert oder einer leeren Zeichenfolge zuweisen. Wenn für die Ausdrucksspalte ein Standardwert festgelegt wird, werden alle zuvor ausgefüllten Zeilen nach dem Zurücksetzen der Expression Eigenschaft dem Standardwert zugewiesen.