Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

DataColumn.Expression-Eigenschaft

Ruft den Ausdruck ab, mit dem Zeilen gefiltert, die Werte in einer Spalte berechnet oder eine Aggregatspalte erstellt werden, oder legt diesen fest.

Namespace:  System.Data
Assembly:  System.Data (in System.Data.dll)

public string Expression { get; set; }

Eigenschaftswert

Typ: System.String
Ein Ausdruck, mit dem der Wert einer Spalte berechnet oder eine Aggregatspalte erstellt wird. Der Rückgabetyp eines Ausdrucks wird durch den DataType der Spalte bestimmt.

AusnahmeBedingung
ArgumentException

Die AutoIncrement-Eigenschaft oder die Unique-Eigenschaft ist auf true festgelegt.

FormatException

Bei der Verwendung der CONVERT-Funktion wird der Ausdruck als Zeichenfolge ausgewertet, die Zeichenfolge enthält jedoch keine Darstellung, die in den Typparameter konvertiert werden kann.

InvalidCastException

Bei der Verwendung der CONVERT-Funktion ist die angeforderte Umwandlung nicht möglich. Ausführliche Informationen zu möglichen Umwandlungen finden Sie im folgenden Abschnitt unter der Konvertierungsfunktion.

ArgumentOutOfRangeException

Bei der Verwendung der SUBSTRING-Funktion befindet sich das Anfangsargument außerhalb des gültigen Bereichs.

– oder –

Bei der Verwendung der SUBSTRING-Funktion befindet sich das Längenargument außerhalb des gültigen Bereichs.

Exception

Bei der Verwendung der LEN-Funktion oder der TRIM-Funktion wird der Ausdruck nicht als Zeichenfolge ausgewertet. Dies gilt auch für Ausdrücke, die als Char ausgewertet werden.

Mit der Expression-Eigenschaft können Sie unter anderem berechnete Spalten erstellen. Wenn Sie z. B. einen Steuerwert berechnen möchten, wird der Stückpreis mit dem Steuersatz einer bestimmten Region multipliziert. Da Steuersätze regional unterschiedlich sind, ist es unmöglich, einen einzigen Steuersatz in eine Spalte einzugeben. Stattdessen wird der Wert mithilfe der Expression-Eigenschaft berechnet, wie im Visual Basic-Code im folgenden Abschnitt veranschaulicht:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

Darüber hinaus können Sie mit der Eigenschaft eine Aggregatspalte erstellen. Wie bei einem berechneten Wert wird bei einem Aggregat eine Operation auf Grundlage des gesamten Zeilensets in der DataTable durchgeführt. Ein einfaches Beispiel besteht darin, die Anzahl der im Set zurückgegebenen Zeilen zu zählen. Diese Methode würden Sie verwenden, um die Anzahl der von einem bestimmten Verkäufer abgeschlossenen Transaktionen zu zählen, wie im Visual Basic-Code veranschaulicht:

 DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"

Ausdruckssyntax

Verwenden Sie beim Erstellen eines Ausdrucks die ColumnName-Eigenschaft, um auf Spalten zu verweisen. Wenn z. B. der ColumnName einer Spalte "UnitPrice" und der einer anderen "Quantity" lautet, ergibt sich folgender Ausdruck:

"UnitPrice * Quantity"

HinweisHinweis

Wenn eine Spalte in einem Ausdruck verwendet wird, wird dies als Abhängigkeit des Ausdrucks von dieser Spalte bezeichnet. Wenn eine abhängige Spalte umbenannt wird oder entfernt wird, wird keine Ausnahme ausgelöst. Eine Ausnahme wird ausgelöst, wenn auf die nicht mehr ordnungsgemäß verbundene Spalte im Ausdruck zugegriffen wird.

Beim Erstellen eines Ausdrucks für einen Filter schließen Sie Zeichenfolgen in einfache Anführungszeichen ein:

"LastName = 'Jones'"

Wenn ein Spaltenname beliebige nicht alphanumerische Zeichen enthält oder mit einer Ziffer beginnt oder (ohne Berücksichtigung der Groß- und Kleinschreibung) mit einem der folgenden reservierten Wörter übereinstimmt, ist eine besondere Behandlung erforderlich, die in den folgenden Absätzen beschrieben wird.

And

zwischen

Untergeordnetes Element

False

In

is

Like

Not

Null

Oder

Parent (Übergeordnet)

True

Wenn ein Spaltenname eine der oben genannten Bedingungen erfüllt, muss er in eckige Klammern oder das Anführungszeichen "`" (Graviszeichen) eingeschlossen werden. Wenn Sie z. B. eine Spalte mit dem Namen "Column#" in einem Ausdruck verwenden, schreiben Sie "[Column#]":

Total * [Column#]

oder "`Column#`":

Total * `Column#`

Wenn der Spaltenname in eckige Klammern eingeschlossen wird, müssen alle ']'- und '\'-Zeichen (aber keine anderen Zeichen) darin mit Escapezeichen versehen werden, indem diesen der umgekehrte Schrägstrich ("\") vorangestellt wird. Wenn der Spaltenname dann in Graviszeichen eingeschlossen wird, darf er keine Graviszeichen enthalten. Eine Spalte mit dem Namen "Column[]\" wird z. B. wie folgt geschrieben:

Total * [Column[\]\\]

Oder

Total * `Column[]\`

Benutzerdefinierte Werte

Benutzerdefinierte Werte können in Ausdrücken verwendet und mit Spaltenwerten verglichen werden. Zeichenfolgenwerte sollten in einfache Anführungszeichen eingeschlossen werden. (Und jedes einzelne Anführungszeichen in einem Zeichenfolgenwert muss maskiert werden, indem ihm ein weiteres einzelnes Anführungszeichen vorangestellt wird.) Datenwerte sollten abhängig vom Datenanbieter in Nummernzeichen (#) oder einfache Anführungszeichen (') eingeschlossen werden. Dezimalwerte und wissenschaftliche Schreibweise sind für numerische Werte zulässig. Zum Beispiel:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/82#"

Wandeln Sie bei Spalten mit Enumerationswerten den Wert in einen Ganzzahldatentyp um. Zum Beispiel:

"EnumColumn = 5"

Analysieren von literalen Ausdrücken

Alle literalen Ausdrücke müssen im invarianten Kulturgebietsschema ausgedrückt werden. Wenn DataSet literale Ausdrücke analysiert und konvertiert, verwendet es immer die invariante Kultur, nicht die aktuelle Kultur.

Zeichenfolgenliterale werden durch einfache Anführungszeichen um den Wert identifiziert. Zum Beispiel:

'John'

Boolean -Literale haben den Wert true und false; sie werden nicht in Ausdrücken zitiert.

Integer -Literale [+-]?[0-9]+ werden als System.Int32, System.Int64 oder System.Double behandelt. System.Double kann Genauigkeit verlieren, je nachdem, wie groß die Zahl ist. Wenn die Zahl im Literal z. B. 2147483650 ist, versucht DataSet, zuerst die Zahl als Int32 zu analysieren. Dies ist nicht erfolgreich, da die Zahl zu groß ist. In diesem Fall analysiert DataSet die Zahl als Int64 und ist erfolgreich. Wenn das Literal eine Zahl größer als der maximale Wert von einem Int64 war, analysiert DataSet das Literal mit Double.

Wirkliche Literale mit wissenschaftlicher Schreibweise, z. B. 4.42372E-30, werden mit System.Double analysiert.

Wirkliche Literale ohne wissenschaftliche Schreibweise, aber mit einem Dezimaltrennzeichen, werden als System.Decimal behandelt. Wenn die Zahl den maximalen oder den minimalen Wert, der von System.Decimal unterstützt wird, überschreitet, dann wird sie als System.Double analysiert. Zum Beispiel:

142526.144524 wird in einen Decimal konvertiert.

345262.78036719560925667 wird als Double behandelt.

Operatoren

Die Verkettung mit den booleschen Operatoren AND, OR und NOT ist zulässig. Sie können mithilfe von Klammern Klauseln gruppieren und den Vorrang erzwingen. Der Operator AND hat Vorrang gegenüber anderen Operatoren. Zum Beispiel:

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

Beim Erstellen von Vergleichsausdrücken sind die folgenden Operatoren zulässig:

<

>

<=

>=

<>

=

IN

LIKE

Die folgenden arithmetischen Operatoren werden ebenfalls in Ausdrücken unterstützt:

+ (Addition)

- (Subtraktion)

* (Multiplikation)

/ (Division)

% (Modulo)

Zeichenfolgenoperatoren

Verwenden Sie zum Verketten einer Zeichenfolge das Pluszeichen (+). Der Wert der CaseSensitive-Eigenschaft der DataSet-Klasse bestimmt, ob bei Zeichenfolgenvergleichen die Groß- und Kleinschreibung berücksichtigt wird. Sie können diesen Wert jedoch mit der DataTable-Eigenschaft der CaseSensitive-Klasse überschreiben.

Platzhalterzeichen

Sowohl * als auch % können in einem LIKE-Vergleich synonym als Platzhalter verwendet werden. Wenn die Zeichenfolge in einer LIKE-Klausel * oder % enthält, müssen diese Zeichen in eckige Klammern ([]) eingeschlossen werden. Wenn eine Klammer in der Klausel enthalten ist, müssen die Klammerzeichen in Klammern eingeschlossen werden (z. B. [[] oder []]). Ein Platzhalter ist sowohl an Anfang und Ende eines Musters als auch nur am Ende oder nur am Anfang eines Musters zulässig. Zum Beispiel:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

Platzhalter innerhalb einer Zeichenfolge sind unzulässig. 'te*xt' ist z. B. nicht zulässig.

Verweise auf Parent/Child-Beziehungen

In einem Ausdruck kann auf eine übergeordnete Tabelle verwiesen werden, indem dem Spaltennamen Parent vorangestellt wird. Parent.Price verweist z. B. auf die Spalte Price der übergeordneten Tabelle.

Wenn ein untergeordnetes Element mehr als eine übergeordnete Zeile hat, verwenden Sie Parent(RelationName).ColumnName. Der Parent(RelationName).Price verweist beispielsweise über die Beziehung auf die Spalte Price der übergeordneten Tabelle.

In einem Ausdruck kann auf eine Spalte in einer untergeordneten Tabelle verwiesen werden, indem dem Spaltennamen Child vorangestellt wird. Da untergeordnete Beziehungen mehrere Zeilen zurückgeben können, müssen Sie jedoch den Verweis auf die untergeordnete Spalte in eine Aggregatfunktion einschließen. Sum(Child.Price) gibt z. B. die Summe der Spalte Price in der untergeordneten Tabelle zurück.

Wenn eine Tabelle über mehrere untergeordnete Tabellen verfügt, lautet die Syntax: Child(RelationName). Wenn eine Tabelle z. B. über die beiden untergeordneten Tabellen Customers und Orders verfügt und das DataRelation-Objekt den Namen Customers2Orders hat, lautet der Verweis wie folgt:

Avg(Child(Customers2Orders).Quantity)

Aggregate

Die folgenden Aggregattypen werden unterstützt:

Sum (Summe)

Avg (Durchschnitt)

Min (Minimum)

Max (Maximum)

Count (Anzahl)

StDev (Statistische Standardabweichung)

Var (Statistische Varianz).

Aggregate werden i. d. R. bei Beziehungen durchgeführt. Erstellen Sie mit einer der oben aufgelisteten Funktionen einen Aggregatausdruck sowie eine Spalte einer untergeordneten Tabelle, wie weiter oben unter VERWEISE AUF PARENT/CHILD-BEZIEHUNGEN beschrieben. Zum Beispiel:

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

Ein Aggregat kann auch für eine einzelne Tabelle durchgeführt werden. Ein Beispiel dafür ist das Erstellen einer Zusammenfassung von Zahlen in der Spalte "Price":

Sum(Price)

HinweisHinweis

Wenn Sie ein Aggregat anhand einer einzelnen Tabelle erstellen, sind keine Gruppierungsfunktionen vorhanden. Stattdessen wird in der Spalte in allen Zeilen derselbe Wert angezeigt.

Wenn eine Tabelle keine Zeilen enthält, geben die Aggregatfunktionen null zurück.

Datentypen lassen sich stets durch Untersuchen der DataType-Eigenschaft einer Spalte bestimmen. Sie können Datentypen auch, wie im folgenden Abschnitt dargestellt, mit der Convert-Funktion konvertieren.

Funktionen

Die folgenden Funktionen werden ebenfalls unterstützt:

CONVERT

Beschreibungen

Konvertiert einen bestimmten Ausdruck in einen angegebenen .NET Framework-Typ.

Syntax

Convert(expression, type)

Argumente

expression – Der zu konvertierende Ausdruck.

type – Der .NET Framework-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 von und in Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String und sich selbst umgewandelt werden. Char kann nur aus und in Int32, UInt32, String und sich selbst umgewandelt werden. DateTime kann nur aus und in String und sich selbst umgewandelt werden. TimeSpan kann nur aus und in String und sich selbst umgewandelt werden.

LEN

Beschreibungen

Ruft die Länge einer Zeichenfolge ab.

Syntax

LEN(expression)

Argumente

expression – Die auszuwertende Zeichenfolge.

Beispiel: myDataColumn.Expression="Len(ItemName)"

ISNULL

Beschreibungen

Überprüft einen Ausdruck und gibt entweder den überprüften Ausdruck oder einen Ersatzwert zurück.

Syntax

ISNULL(expression, replacementvalue)

Argumente

expression – Der zu überprüfende Ausdruck.

replacementvalue – Wenn der Ausdruck null ist, wird replacementvalue zurückgegeben.

Beispiel: myDataColumn.Expression="IsNull(price, -1)"

IIF

Beschreibungen

Ruft je nach dem Ergebnis eines logischen Ausdrucks einen von zwei Werten ab.

Syntax

IIF(expr, truepart, falsepart)

Argumente

expr – Der auszuwertende Ausdruck.

truepart – Der Wert der zurückgegeben wird, wenn der Ausdruck True ist.

falsepart – Der Wert, der zurückgegeben wird, wenn der Ausdruck False ist.

Beispiel: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

Beschreibungen

Entfernt alle vorangestellten oder nachgestellten Leerraumzeichen, z. B. \r, \n, \t und ' '.

Syntax

TRIM(expression)

Argumente

expression – Der zu kürzende Ausdruck.

SUBSTRING

Beschreibungen

Ruft eine Teilzeichenfolge einer angegebenen Länge ab, beginnend an einem angegebenen Punkt in der Zeichenfolge.

Syntax

SUBSTRING(expression, start, length)

Argumente

expression – Die Quellzeichenfolge für die Teilzeichenfolge.

start – Eine ganze Zahl, die den Beginn der Teilzeichenfolge angibt.

length – Eine ganze Zahl, die die Länge der Teilzeichenfolge angibt.

Beispiel: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

HinweisHinweis

Sie können die Expression-Eigenschaft zurücksetzen, indem Sie ihr einen NULL-Wert oder eine leere Zeichenfolge zuordnen. Wenn ein Standardwert für die Ausdrucksspalte festgelegt ist, wird allen bereits ausgefüllten Zeilen nach dem Zurücksetzen der Expression-Eigenschaft der Standardwert zugeordnet.

Im folgenden Beispiel werden drei Spalten in einer DataTable erstellt. Die zweite und die dritte Spalte enthalten Ausdrücke. Die zweite berechnet unter Verwendung eines variablen Steuersatzes den Steuerwert, und die dritte addiert das Ergebnis der Berechnung zum Wert der ersten Spalte. Die sich ergebende Tabelle wird in einem DataGrid-Steuerelement angezeigt.


private void CalcColumns()
{
    DataTable table = new DataTable ();

    // Create the first column.
    DataColumn priceColumn = new DataColumn();
    priceColumn.DataType = System.Type.GetType("System.Decimal");
    priceColumn.ColumnName = "price";
    priceColumn.DefaultValue = 50;

    // Create the second, calculated, column.
    DataColumn taxColumn = new DataColumn();
    taxColumn.DataType = System.Type.GetType("System.Decimal");
    taxColumn.ColumnName = "tax";
    taxColumn.Expression = "price * 0.0862";

    // Create third column.
    DataColumn totalColumn = new DataColumn();
    totalColumn.DataType = System.Type.GetType("System.Decimal");
    totalColumn.ColumnName = "total";
    totalColumn.Expression = "price + tax";

    // Add columns to DataTable.
    table.Columns.Add(priceColumn);
    table.Columns.Add(taxColumn);
    table.Columns.Add(totalColumn);

    DataRow row = table.NewRow();
    table.Rows.Add(row);
    DataView view = new DataView(table);
    dataGrid1.DataSource = view;
}


.NET Framework

Unterstützt in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 oder höher, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core wird nicht unterstützt), Windows Server 2008 R2 (Server Core wird mit SP1 oder höher unterstützt), Windows Server 2003 SP2

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Anzeigen: