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.Int64oder 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 Int32zu analysieren. Dies ist nicht erfolgreich, da die Zahl zu groß ist. In diesem Fall DataSetanalysiert die Zahl als Int64eine , 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.Doubleanalysiert.

Reale Literale ohne wissenschaftliche Schreibweise, aber mit einem Dezimalkomma werden als System.Decimalbehandelt. 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 Doublebehandelt.

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 Ordersdas DataRelation Objekt benannt Customers2Ordersist, 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, Int64UInt32UInt16, UInt64und String sich selbst umgewandelt werden. Char kann nur in und von Int32, UInt32, Stringund 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.