DataColumn.Expression Eigenschaft
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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.Int32
oder System.Int64
System.Double
behandelt. 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 Int32
zu 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 Double
von .
Realliterale mit wissenschaftlicher Notation, z. B. 4.42372E-30, werden mit System.Double
analysiert.
Echte Literale ohne wissenschaftliche Notation, aber mit einem Dezimaltrennzeichen werden als System.Decimal
behandelt. Wenn die Zahl die von System.Decimal
unterstützten maximalen oder minimalen Werte überschreitet, wird sie als System.Double
analysiert. Beispiel:
142526.144524 wird in konvertiert Decimal
.
345262.78036719560925667 wird als Double
behandelt.
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 Parent
vorangestellt 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 Child
vorangestellt 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 Orders
und 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
, , Int16
SByte
, Int32
, Int64
, UInt16
UInt32
, , UInt64
und String
selbst gecced werden. Char
kann nur zu und von Int32
, UInt32
, String
und 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.