DataColumn.Expression Właściwość

Definicja

Pobiera lub ustawia wyrażenie używane do filtrowania wierszy, obliczania wartości w kolumnie lub tworzenia kolumny agregującej.

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

Wartość właściwości

String

Wyrażenie do obliczenia wartości kolumny lub utworzenie kolumny agregującej. Zwracany typ wyrażenia jest określany przez DataType kolumnę .

Atrybuty

Wyjątki

Właściwość or Unique jest ustawiona AutoIncrement na truewartość .

W przypadku korzystania z funkcji CONVERT wyrażenie oblicza ciąg, ale ciąg nie zawiera reprezentacji, którą można przekonwertować na parametr typu.

Jeśli używasz funkcji CONVERT, żądana obsada nie jest możliwa. Aby uzyskać szczegółowe informacje na temat możliwych rzutów, zobacz funkcję Conversion w poniższej sekcji.

W przypadku korzystania z funkcji SUBSTRING argument początkowy jest poza zakresem.

— Lub —

W przypadku korzystania z funkcji SUBSTRING argument długości jest poza zakresem.

Jeśli używasz funkcji LEN lub funkcji TRIM, wyrażenie nie jest obliczane na ciąg. Obejmuje to wyrażenia, które oceniają Charwartość .

Przykłady

Poniższy przykład tworzy trzy kolumny w obiekcie DataTable. Drugie i trzecie kolumny zawierają wyrażenia; drugi oblicza podatek przy użyciu zmiennej stawki podatkowej, a trzeci dodaje wynik obliczenia do wartości pierwszej kolumny. Wynikowa tabela jest wyświetlana w kontrolce DataGrid .

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

Uwagi

Jednym z zastosowań Expression właściwości jest utworzenie kolumn obliczeniowych. Na przykład aby obliczyć wartość podatkową, cena jednostkowa jest mnożona przez stawkę podatkową określonego regionu. Ponieważ stawki podatkowe różnią się w zależności od regionu do regionu, nie byłoby możliwe umieszczenie pojedynczej stawki podatkowej w kolumnie; Zamiast tego wartość jest obliczana przy użyciu Expression właściwości , jak pokazano w kodzie Języka Visual Basic w poniższej sekcji:

DataSet1.Tables("Products"). Columns("tax"). Wyrażenie = "UnitPrice * 0.086"

Drugie użycie polega na utworzeniu kolumny agregującej. Podobnie jak w przypadku wartości obliczeniowej, agregacja wykonuje operację na podstawie kompletnego zestawu wierszy w obiekcie DataTable. Prostym przykładem jest zliczenie liczby wierszy zwróconych w zestawie. Jest to metoda, która służy do zliczenia liczby transakcji zakończonych przez określonego sprzedawcy, jak pokazano w tym kodzie języka Visual Basic:

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

Składnia wyrażeń

Podczas tworzenia wyrażenia użyj ColumnName właściwości , aby odwołać się do kolumn. Jeśli na przykład kolumna ColumnName dla jednej kolumny to "UnitPrice", a druga "Quantity", wyrażenie będzie następujące:

"UnitPrice * Quantity"

Uwaga

Jeśli kolumna jest używana w wyrażeniu, mówi się, że wyrażenie ma zależność od tej kolumny. Jeśli nazwa kolumny zależnej zostanie zmieniona lub usunięta, nie zostanie zgłoszony wyjątek. Gdy jest uzyskiwany dostęp do kolumny wyrażenia, zostanie zgłoszony wyjątek.

Podczas tworzenia wyrażenia dla filtru należy ująć ciągi w znaki pojedynczego cudzysłowu:

"LastName = 'Jones'"

Jeśli nazwa kolumny zawiera jakiekolwiek znaki inne niż alfanumeryczne lub rozpoczyna się od cyfry lub dopasowań (bez uwzględniania wielkości liter) dowolnego z następujących zastrzeżonych wyrazów, wymaga specjalnej obsługi, zgodnie z opisem w poniższych akapitach.

And

Między

Dziecko

Fałsz

W

Is

Jak

Not

Zero

Lub

Nadrzędny

Prawda

Jeśli nazwa kolumny spełnia jeden z powyższych warunków, musi być opakowana w nawiasy kwadratowe lub cudzysłów "'" (akcent grobowy). Aby na przykład użyć kolumny o nazwie "Column#" w wyrażeniu, należy napisać jedną z kolumn "[Column#]":

Suma * [Kolumna#]

lub "`Column#":

Total * `Column#'

Jeśli nazwa kolumny jest ujęta w nawiasy kwadratowe, wszelkie znaki "]" i "\" (ale nie inne znaki) muszą być w nim poprzedzone znakiem ukośnika odwrotnego ("\"). Jeśli nazwa kolumny jest ujęta w znaki akcentu grobowego, nie może zawierać żadnych poważnych znaków wyróżniających. Na przykład zostanie zapisana kolumna o nazwie "Column[]\":

Suma * [Kolumna[\]\\]

lub

Suma * `Kolumna[]\`

Wartości zdefiniowane przez użytkownika

Wartości zdefiniowane przez użytkownika mogą być używane w wyrażeniach do porównywania z wartościami kolumn. Wartości ciągów powinny być ujęte w pojedynczy cudzysłów (a każdy pojedynczy znak cudzysłowu w wartości ciągu musi zostać uniknięty przez dołączenie go do innego pojedynczego znaku cudzysłowu). Wartości daty powinny być ujęte w znaki funta (#) lub apostrofy (') na podstawie dostawcy danych. Wartości dziesiętne i notacja naukowa są dozwolone dla wartości liczbowych. Przykład:

"FirstName = 'John'"

"Cena <= 50,00"

"Data urodzenia < #1/31/82#"

W przypadku kolumn zawierających wartości wyliczenia rzutuj wartość na typ danych liczb całkowitych. Przykład:

"EnumColumn = 5"

Analizowanie wyrażeń literalnych

Wszystkie wyrażenia literału muszą być wyrażone w niezmiennych ustawieniach regionalnych kultury. Podczas DataSet analizowania i konwertowania wyrażeń literałów zawsze jest używana niezmienna kultura, a nie bieżąca kultura.

Literały ciągu są identyfikowane, gdy istnieją pojedyncze cudzysłowy otaczające wartość. Przykład:

"Jan"

Boolean literały są prawdziwe i fałszywe; nie są cytowane w wyrażeniach.

Integer literały [+-]? [0–9]+ są traktowane jako System.Int32, System.Int64 lub System.Double. System.Double może utracić dokładność w zależności od wielkości liczby. Jeśli na przykład liczba w literału jest 2147483650, DataSet najpierw spróbuje przeanalizować liczbę jako .Int32 Nie powiedzie się, ponieważ liczba jest zbyt duża. W takim przypadku DataSet przeanalizuje liczbę jako Int64wartość , która powiedzie się. Jeśli literał był liczbą większą niż maksymalna wartość int64, DataSet przeanalizuje literał przy użyciu metody Double.

Rzeczywiste literały używające notacji naukowej, takiej jak 4.42372E-30, są analizowane przy użyciu metody System.Double.

Rzeczywiste literały bez notacji naukowej, ale z separatorem dziesiętnym są traktowane jako System.Decimal. Jeśli liczba przekroczy wartość maksymalną lub minimalną obsługiwaną System.Doubleprzez System.Decimalparametr , zostanie ona przeanalizowana jako . Przykład:

142526.144524 zostanie przekonwertowany na Decimal.

345262.78036719560925667 będzie traktowany Doublejako .

Operatory

Łączenie jest dozwolone przy użyciu operatorów logicznych AND, OR i NOT. Nawiasy umożliwiają grupowanie klauzul i wymuszanie pierwszeństwa. Operator AND ma pierwszeństwo przed innymi operatorami. Przykład:

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

Podczas tworzenia wyrażeń porównania dozwolone są następujące operatory:

<

>

<=

>=

<>

=

IN

LIKE

Następujące operatory arytmetyczne są również obsługiwane w wyrażeniach:

+ (dodawanie)

- (odejmowanie)

* (mnożenie)

/ (dzielenie)

% (modulo)

Operatory ciągów

Aby połączyć ciąg, użyj znaku + . Wartość CaseSensitive właściwości DataSet klasy określa, czy w porównaniach ciągów jest uwzględniana wielkość liter. Można jednak zastąpić tę wartość właściwością CaseSensitive DataTable klasy .

Znaki symboli wieloznacznych

Zarówno znaki *, jak i % mogą być używane zamiennie dla symboli wieloznacznych w porównaniu LIKE. Jeśli ciąg w klauzuli LIKE zawiera znak * lub %, te znaki powinny być ujęte w nawiasy kwadratowe ([]). Jeśli nawias znajduje się w klauzuli, każdy znak nawiasu powinien być ujęta w nawiasy kwadratowe (na przykład [[] lub []]). Symbol wieloznaczny jest dozwolony na początku i na końcu wzorca lub na końcu wzorca lub na początku wzorca. Przykład:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

Symbole wieloznaczne nie są dozwolone w środku ciągu. Na przykład polecenie "te*xt" jest niedozwolone.

Odwoływanie się do relacji nadrzędny/podrzędny

Do tabeli nadrzędnej można odwoływać się w wyrażeniu, poprzedzając nazwę kolumny ciągiem Parent. Na przykład element Parent.Price odwołuje się do kolumny tabeli nadrzędnej o nazwie Price.

Jeśli element podrzędny ma więcej niż jeden wiersz nadrzędny, użyj elementu Parent(RelationName). Columnname. Na przykład Parent(RelationName). Price odwołuje się do kolumny tabeli nadrzędnej o nazwie Price za pośrednictwem relacji.

Kolumna w tabeli podrzędnej może być przywoływane w wyrażeniu, poprzedzając nazwę kolumny ciągiem Child. Jednak ponieważ relacje podrzędne mogą zwracać wiele wierszy, należy dołączyć odwołanie do kolumny podrzędnej w funkcji agregującej. Na przykład Sum(Child.Price) metoda zwróci sumę kolumny o nazwie Price w tabeli podrzędnej.

Jeśli tabela ma więcej niż jeden element podrzędny, składnia to: Child(RelationName). Jeśli na przykład tabela ma dwie tabele podrzędne o nazwie Customers i , a DataRelation obiekt ma nazwę Customers2Orders, odwołanie będzie Orderswyglądać następująco:

Avg(Child(Customers2Orders). Ilość)

Agregacje

Obsługiwane są następujące typy agregacji:

Suma (suma)

Średnia (średnia)

Minimalna (minimalna)

Maksimum (maksimum)

Liczba (liczba)

Odchylenie standardowe (statystyczne odchylenie standardowe)

Var (wariancja statystyczna).

Agregacje są zwykle wykonywane wzdłuż relacji. Utwórz wyrażenie agregujące przy użyciu jednej z funkcji wymienionych wcześniej i kolumny tabeli podrzędnej zgodnie z opisem w temacie Odwołanie do relacji nadrzędny/podrzędny, które zostało omówione wcześniej. Przykład:

Avg(Child.Price)

Avg(Child(Orders2Details). Cena)

Agregację można również wykonać w jednej tabeli. Aby na przykład utworzyć podsumowanie liczb w kolumnie o nazwie "Price":

Sum(Price)

Uwaga

Jeśli do utworzenia agregacji jest używana pojedyncza tabela, nie będzie żadnych funkcji grupowania. Zamiast tego wszystkie wiersze będą wyświetlać tę samą wartość w kolumnie.

Jeśli tabela nie ma wierszy, funkcje agregujące zwracają nullwartość .

Typy danych zawsze można określić, sprawdzając DataType właściwość kolumny. Typy danych można również przekonwertować przy użyciu funkcji Convert, pokazanej w poniższej sekcji.

Agregacja może być stosowana tylko do jednej kolumny, a żadne inne wyrażenia nie mogą być używane wewnątrz agregacji.

Funkcje

Obsługiwane są również następujące funkcje:

CONVERT

Opis Konwertuje określone wyrażenie na określony typ .NET Framework.
Składnia Konwertuj(expression, type)
Argumenty expression -- Wyrażenie do konwersji.

type -- . TYP SIECI, do którego zostanie przekonwertowana wartość.

Przykład: myDataColumn.Expression="Convert(total, 'System.Int32')"

Wszystkie konwersje są prawidłowe z następującymi wyjątkami: Boolean mogą być zmuszane do i z Byte, , SByte``UInt32``Int32``String Int16``Int64``UInt16``UInt64i tylko siebie. Charmoże być coerced do i z Int32, , String``UInt32, i tylko sam. DateTime może być zmuszany tylko do i od String i do samego siebie. TimeSpan może być zmuszany tylko do i od String i do samego siebie.

LEN

Opis Pobiera długość ciągu
Składnia LEN(expression)
Argumenty expression -- Ciąg, który ma zostać oceniony.

Przykład: myDataColumn.Expression="Len(ItemName)"

ISNULL

Opis Sprawdza wyrażenie i zwraca wyrażenie zaznaczone lub wartość zastępczą.
Składnia ISNULL(expression, replacementvalue)
Argumenty expression -- Wyrażenie do sprawdzenia.

replacementvalue -- Jeśli wyrażenie ma wartość null, replacementvalue jest zwracane.

Przykład: myDataColumn.Expression="IsNull(price, -1)"

IIF

Opis Pobiera jedną z dwóch wartości w zależności od wyniku wyrażenia logicznego.
Składnia IIF(expr, truepart, falsepart)
Argumenty expr -- Wyrażenie do oceny.

truepart -- Wartość, która ma być zwracana, jeśli wyrażenie ma wartość true.

falsepart -- Wartość, która ma być zwracana, jeśli wyrażenie ma wartość false.

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

TRIM

Opis Usuwa wszystkie wiodące i końcowe puste znaki, takie jak \r, \n, \t, ' '
Składnia TRIM(expression)
Argumenty expression - Wyrażenie do przycinania.

SUBSTRING

Opis Pobiera podciąg określonej długości, zaczynając od określonego punktu w ciągu.
Składnia SUBSTRING(expression, start, length)
Argumenty expression - Ciąg źródłowy podciągów.

start -- Liczba całkowita określająca, gdzie rozpoczyna się podciąg.

length -- Liczba całkowita określająca długość podciągów.

Przykład: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Uwaga

Właściwość można zresetować Expression , przypisując jej wartość null lub pusty ciąg. Jeśli wartość domyślna zostanie ustawiona w kolumnie wyrażenia, wszystkie wcześniej wypełnione wiersze zostaną przypisane do wartości domyślnej Expression po zresetowaniu właściwości.

Dotyczy

Zobacz też