DataColumn.Expression Eigenschaft

Definition

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

public:
 property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
public string Expression { get; set; }
[System.Data.DataSysDescription("DataColumnExpressionDescr")]
public string Expression { get; set; }
member this.Expression : string with get, set
[<System.Data.DataSysDescription("DataColumnExpressionDescr")>]
member this.Expression : string with get, set
Public Property Expression As String

Eigenschaftswert

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.

Attribute

Ausnahmen

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

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.

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.

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.

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.

Beispiele

Im folgenden Beispiel werden drei Spalten in einem DataTableerstellt. Die zweite und dritte Spalte enthalten Ausdrücke; der zweite berechnet die Steuer mit einem variablen Steuersatz, und der dritte addiert das Ergebnis der Berechnung zum Wert der ersten Spalte. Die resultierende 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;
}
Private Sub CalcColumns()
     Dim rate As Single = .0862
     Dim table As New DataTable()
 
     ' Create the first column.
     Dim priceColumn As New DataColumn()
     With priceColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "price"
         .DefaultValue = 50
     End With
     
     ' Create the second, calculated, column.
     Dim taxColumn As New DataColumn()
     With taxColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "tax"
         .Expression = "price * 0.0862"
     End With
     
    ' Create third column
     Dim totalColumn As New DataColumn()
     With totalColumn
         .DataType = System.Type.GetType("System.Decimal")
         .ColumnName = "total"
         .Expression = "price + tax"
     End With
 
     ' Add columns to DataTable
     With table.Columns
         .Add(priceColumn)
         .Add(taxColumn)
         .Add(totalColumn)
     End With
    
     Dim row As DataRow= table.NewRow
     table.Rows.Add(row)
     Dim view As New DataView
     view.Table = table
     DataGrid1.DataSource = view
 End Sub

Hinweise

Eine Verwendung der Expression -Eigenschaft besteht darin, berechnete Spalten zu erstellen. Um beispielsweise einen Steuerwert zu berechnen, wird der Preis pro Einheit 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 einzufügen. Stattdessen wird der Wert mithilfe der Expression -Eigenschaft berechnet, wie im Visual Basic-Code im folgenden Abschnitt gezeigt:

DataSet1.Tables("Products"). Columns("tax"). Ausdruck = "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 im aus DataTable. Ein einfaches Beispiel besteht darin, die Anzahl der in der Menge zurückgegebenen Zeilen zu zählen. Dies ist die Methode, die Sie verwenden würden, um die Anzahl von Transaktionen zu zählen, die von einem bestimmten Vertriebsmitarbeiter abgeschlossen wurden, wie in diesem Visual Basic-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 ColumnName z. B. für eine Spalte "UnitPrice" und eine andere "Quantity" lautet, lautet der Ausdruck wie folgt:

"Einzelpreis * Menge"

Hinweis

Wenn eine Spalte in einem Ausdruck verwendet wird, wird davon gesprochen, dass der Ausdruck eine Abhängigkeit von dieser Spalte aufweist. Wenn eine abhängige Spalte umbenannt oder entfernt wird, wird keine Ausnahme ausgelöst. Eine Ausnahme wird ausgelöst, wenn auf die jetzt unterbrochene Ausdrucksspalte zugegriffen wird.

Wenn Sie einen Ausdruck für einen Filter erstellen, schließen Sie Zeichenfolgen in einfache Anführungszeichen ein:

"LastName = 'Jones'"

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

And

Zwischen

Untergeordnet

False

In

Is

Wie

Not

Null

oder

Parent

True

Wenn ein Spaltenname eine der oben genannten Bedingungen erfüllt, muss er in eckige Klammern oder die Anführungszeichen "'" (Grabakzent) umschlossen werden. Wenn Sie beispielsweise eine Spalte mit dem Namen "Column#" in einem Ausdruck verwenden möchten, schreiben Sie entweder "[Spalte#]":

Total * [Column#]

oder "'Column#'":

Total * 'Column#'

Wenn der Spaltenname in eckige Klammern eingeschlossen ist, müssen alle Zeichen "]" und "\" (aber keine anderen Zeichen) darin mit Escapezeichen versehen werden, indem sie mit dem umgekehrten Schrägstrich ("\") vorangestellt werden. Wenn der Spaltenname in Grab-Akzentzeichen eingeschlossen ist, darf er keine Grab-Akzentzeichen enthalten. Beispielsweise würde eine Spalte mit dem Namen "Column[]\" geschrieben werden:

Total * [Column[\]\\]

oder

Total * 'Column[]\'

User-Defined 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 eines weiteren einfachen Anführungszeichens mit Escapezeichen versehen werden). Datumswerte sollten basierend auf dem Datenanbieter in Pfundzeichen (#) oder einfache Anführungszeichen (') eingeschlossen werden. Dezimalstellen und wissenschaftliche Notation sind für numerische Werte zulässig. Beispiel:

"FirstName = 'John'"

"Price <= 50,00"

"Geburtsdatum < #1/31/82#"

Für Spalten, die Enumerationswerte enthalten, wandeln Sie den Wert in einen ganzzahligen Datentyp um. Beispiel:

"EnumColumn = 5"

Analysieren von Literalausdrücken

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

Zeichenfolgenliterale werden identifiziert, wenn der Wert in einfachen Anführungszeichen enthalten ist. Beispiel:

"John"

Boolean Literale sind "true" und "false". Sie werden in Ausdrücken nicht in Anführungszeichen gesetzt.

Integer Literale [+-]? [0-9]+ werden als System.Int32oder System.Int64System.Doublebehandelt. System.Double kann an Genauigkeit verlieren, je nachdem, wie groß die Zahl ist. Wenn die Zahl im Literal beispielsweise 2147483650 ist, versucht zuerst, DataSet die Zahl als Int32zu analysieren. Dies ist nicht erfolgreich, da die Zahl zu groß ist. In diesem Fall DataSet analysiert die Zahl als Int64, was erfolgreich ist. Wenn das Literal eine Zahl war, die größer als der Maximalwert eines Int64 ist, DataSet analysiert das Literal mithilfe Doublevon .

Realliterale mit wissenschaftlicher Notation, z. B. 4.42372E-30, werden mit System.Doubleanalysiert.

Echte Literale ohne wissenschaftliche Notation, aber mit einem Dezimaltrennzeichen werden als System.Decimalbehandelt. Wenn die Zahl die von System.Decimalunterstützten maximalen oder minimalen Werte überschreitet, wird sie als System.Doubleanalysiert. Beispiel:

142526.144524 wird in konvertiert Decimal.

345262.78036719560925667 wird als Doublebehandelt.

Operatoren

Die Verkettung ist mithilfe der booleschen OPERATOREN AND, OR und NOT zulässig. Sie können Klammern verwenden, um Klauseln zu gruppieren und rangfolgen 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)

% (Modul)

Zeichenfolgenoperatoren

Um eine Zeichenfolge zu verketten, verwenden Sie das Zeichen +. Der Wert der CaseSensitive -Eigenschaft der DataSet -Klasse bestimmt, ob bei Zeichenfolgenvergleichen die Groß-/Kleinschreibung beachtet wird. Sie können diesen Wert jedoch mit der CaseSensitive -Eigenschaft der DataTable -Klasse überschreiben.

Platzhalterzeichen

Sowohl das * als auch % können in einem LIKE-Vergleich austauschbar für Platzhalterzeichen verwendet werden. Wenn die Zeichenfolge in einer LIKE-Klausel ein * oder %enthält, sollten diese Zeichen in Klammern ([]) eingeschlossen werden. Wenn eine Klammer in der Klausel enthalten ist, sollte jeder Klammer in Klammern (z. B. [[] oder []]) eingeschlossen werden. Ein Feldhalter 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*'"

Feldhalterzeichen sind in der Mitte einer Zeichenfolge nicht zulässig. Beispielsweise ist "te*xt" nicht zulässig.

Verweisen auf die Beziehung zwischen übergeordnetem und untergeordnetem Element

Auf eine übergeordnete Tabelle kann in einem Ausdruck verwiesen werden, indem der Spaltenname mit Parentvorangestellt wird. Der 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. Beispiel: Parent(RelationName). Price verweist über die Beziehung auf die Spalte der übergeordneten Tabelle mit dem Namen Price.

Auf eine Spalte in einer untergeordneten Tabelle kann in einem Ausdruck verwiesen werden, indem der Spaltenname mit Childvorangestellt wird. Da untergeordnete Beziehungen jedoch möglicherweise mehrere Zeilen zurückgeben, müssen Sie den Verweis auf die untergeordnete Spalte in eine Aggregatfunktion einschließen. Sum(Child.Price) Beispielsweise würde die Summe der Spalte mit dem Namen Price in der untergeordneten Tabelle zurückgegeben.

Wenn eine Tabelle über mehrere untergeordnete Elemente verfügt, lautet die Syntax: Child(RelationName). Wenn eine Tabelle beispielsweise zwei untergeordnete Tabellen mit dem Namen Customers und enthält Ordersund das DataRelation Objekt den Namen hat Customers2Orders, lautet der Verweis wie folgt:

Avg(Child(Customers2Orders). Menge)

Aggregate

Die folgenden Aggregattypen werden unterstützt:

Summe (Summe)

Durchschnitt (Durchschnitt)

Min (Minimum)

Max (Maximum)

Count (Anzahl)

StDev (Statistische Standardabweichung)

Var (Statistische Varianz).

Aggregate werden normalerweise entlang von Beziehungen ausgeführt. Erstellen Sie einen Aggregatausdruck, indem Sie eine der zuvor aufgeführten Funktionen und eine untergeordnete Tabellenspalte verwenden, wie unter Verweis auf übergeordnete/untergeordnete Beziehungen beschrieben, die weiter oben erläutert wurde. Beispiel:

Durchschnittliche (Child.Price)

Avg(Child(Orders2Details). Preis)

Ein Aggregat kann auch für eine einzelne Tabelle ausgeführt werden. Um beispielsweise eine Zusammenfassung von Zahlen in einer Spalte mit dem Namen "Price" zu erstellen:

Sum(Price)

Hinweis

Wenn Sie eine einzelne Tabelle zum Erstellen eines Aggregats verwenden, gibt es keine Gruppierungsfunktion. Stattdessen würden alle Zeilen den gleichen Wert in der Spalte anzeigen.

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

Datentypen können immer bestimmt werden, indem die DataType Eigenschaft einer Spalte untersucht wird. Sie können Datentypen auch mit der Convert-Funktion konvertieren, die im folgenden Abschnitt gezeigt wird.

Ein Aggregat kann nur auf eine einzelne Spalte angewendet werden, und innerhalb des Aggregats können keine anderen Ausdrücke verwendet werden.

Functions

Die folgenden Funktionen werden ebenfalls unterstützt:

CONVERT

Beschreibung Konvertiert einen bestimmten Ausdruck in einen angegebenen .NET Framework Type.
Syntax Convert(expression, type)
Argumente 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 können nur an und von Byte, , Int16SByte, Int32, Int64, UInt16UInt32, , UInt64und String selbst gecced werden. Char kann nur zu und von Int32, UInt32, Stringund sich selbst geerced werden. DateTime kann nur zu und von String und selbst geerced werden. TimeSpan kann nur zu und von String und selbst geerced werden.

LEN

BESCHREIBUNG Ruft die Länge einer Zeichenfolge ab.
Syntax LEN(expression)
Argumente expression -- Die auszuwertende Zeichenfolge.

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

ISNULL

BESCHREIBUNG Ü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 Ausdruck ist null, replacementvalue wird zurückgegeben.

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

IIF

Beschreibung Ruft einen von zwei Werten ab, die vom Ergebnis eines logischen Ausdrucks abhängen.
Syntax IIF(expr, truepart, falsepart)
Argumente 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 false ist.

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

TRIM

BESCHREIBUNG Entfernt alle führenden und nachfolgenden leeren Zeichen wie \r, \n, \t, ' '
Syntax TRIM(expression)
Argumente expression -- Der zu kürzeende Ausdruck.

SUBSTRING

Beschreibung Ruft eine Unterzeichenfolge einer angegebenen Länge ab, die an einem angegebenen Punkt in der Zeichenfolge beginnt.
Syntax SUBSTRING(expression, start, length)
Argumente expression – Die Quellzeichenfolge für die Teilzeichenfolge.

start - Ganzzahl, die angibt, wo die Teilzeichenfolge beginnt.

length - Ganzzahl, 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 ihr einen NULL-Wert oder eine leere Zeichenfolge zuweisen. Wenn ein Standardwert für die Ausdrucksspalte festgelegt ist, wird allen zuvor ausgefüllten Zeilen der Standardwert zugewiesen, nachdem die Expression Eigenschaft zurückgesetzt wurde.

Gilt für:

Weitere Informationen