Udostępnij za pośrednictwem


Właściwość System.Data.DataColumn.Expression

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

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 można umieścić jednej stawki podatkowej w kolumnie; Zamiast tego wartość jest obliczana przy użyciu Expression właściwości , jak pokazano w poniższym kodzie:

DataSet1.Tables("Products").Columns("tax").Expression = "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 poniższym kodzie:

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 to:

"UnitPrice * Quantity"

Uwaga

Jeśli kolumna jest używana w wyrażeniu, 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 z pojedynczymi cudzysłowami:

"LastName = 'Jones'"

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

And

Between

Child

False

In

Is

Like

Not

Null

Or

Parent

True

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

Total * [Column#]

Jeśli nazwa kolumny jest ujęta w nawiasy kwadratowe, wszelkie znaki "]" i "\" (ale nie żadne inne znaki) w nim muszą zostać wyprzedzone przez przypisanie ich ukośnikiem odwrotnym ("\"). 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[]\":

Total * [Column[\]\\]

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 poprzedzanie go innym znakiem pojedynczego cudzysłowu). Wartości daty powinny być ujęte w znaki funta (#) lub pojedyncze cudzysłowy (') na podstawie dostawcy danych. Wartości dziesiętne i notacja naukowa są dopuszczalne dla wartości liczbowych. Na przykład:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/2006#"

W przypadku kolumn, które zawierają wartości wyliczenia, rzutuj wartość na typ danych liczb całkowitych. Na przykład:

"EnumColumn = 5"

Analizowanie wyrażeń literałów

Wszystkie wyrażenia literału muszą być wyrażone w niezmiennych ustawieniach regionalnych kultury. Podczas DataSet analizowania i konwertowania wyrażeń literału zawsze używa niezmiennej kultury, a nie bieżącej kultury.

Literały ciągu są identyfikowane, gdy istnieją pojedyncze cudzysłowy otaczające wartość. Na przykład 'John'.

Boolean literały to true i false; nie są cytowane w wyrażeniach.

Integer literały [+-]? [0–9]+ są traktowane jako System.Int32, System.Int64lub System.Double. System.Double może utracić precyzję 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 tym przypadku DataSetfunkcja analizuje liczbę jako Int64wartość , która powiedzie się. Jeśli literał jest liczbą większą niż maksymalna wartość int64, DataSet analizuje literał przy użyciu metody Double.

Rzeczywiste literały używające notacji naukowej, takie 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 przekracza wartość maksymalną lub minimalną obsługiwaną System.Doubleprzez System.Decimalparametr , zostanie ona przeanalizowana jako . Na przykład:

  • 142526.144524 jest konwertowany na Decimal.
  • 345262.78036719560925667 jest 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. Na 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)
  • / (podział)
  • % (modulo)

Operatory ciągów

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

Symboli wieloznacznych

* Znaki 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. Na przykład:

  • "ItemName LIKE '*product*'"
  • "ItemName LIKE '*product'"
  • "ItemName LIKE 'product*'"

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

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

W wyrażeniu można odwoływać się do tabeli nadrzędnej, poprzedzając nazwę kolumny ciągiem Parent. Na przykład 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 polecenia 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) zwraca 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).Quantity)

Agregacje

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

  • Sum (Suma)
  • Avg (Średnia)
  • Min (Minimum)
  • Max (Maksimum)
  • Count (Liczba)
  • StDev (Odchylenie standardowe statystyczne)
  • 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 odwołaniu do relacji nadrzędny/podrzędny. Na przykład:

  • Avg(Child.Price)
  • Avg(Child(Orders2Details).Price)

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 zostanie użyta pojedyncza tabela, nie będzie funkcji grupowania według. Zamiast tego wszystkie wiersze będą wyświetlać tę samą wartość w kolumnie.

Jeśli tabela nie zawiera wierszy, funkcje agregujące zwróci wartość null.

Typy danych zawsze można określić, sprawdzając DataType właściwość kolumny. Typy danych można również przekonwertować przy użyciu Convert funkcji 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

Ta funkcja konwertuje wyrażenie na określony typ platformy .NET.

Convert(expression, type)
Argument opis
expression Wyrażenie do konwersji.
type Typ platformy .NET, 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ć konerced do i z Byte, SByte, Int32UInt16Int64UInt32Int16i UInt64String tylko sam. Char mogą być konercowane tylko do i z Int32, UInt32, Stringi sam. DateTime mogą być zmuszane tylko do i i z String siebie. TimeSpan mogą być zmuszane tylko do i i z String siebie.

LEN

Ta funkcja pobiera długość ciągu.

LEN(expression)
Argumenty opis
expression Ciąg do obliczenia.

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

ISNULL

Ta funkcja sprawdza wyrażenie i zwraca zaznaczone wyrażenie lub wartość zastępczą.

ISNULL(expression, replacementvalue)
Argumenty opis
expression Wyrażenie do sprawdzenia.
replacementvalue Jeśli wyrażenie ma wartość null, replacementvalue jest zwracane.

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

IIF

Ta funkcja pobiera jedną z dwóch wartości w zależności od wyniku wyrażenia logicznego.

IIF(expr, truepart, falsepart)
Argumenty opis
expr Wyrażenie do obliczenia.
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

Ta funkcja usuwa wszystkie wiodące i końcowe puste znaki, takie jak \r, \n, \t i ' .

TRIM(expression)
Argument opis
expression Wyrażenie do przycinania.

SUBSTRING

Ta funkcja pobiera podciąg o określonej długości, zaczynając od określonego punktu w ciągu.

SUBSTRING(expression, start, length)
Argument opis
expression Ciąg źródłowy podciągu
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 po zresetowaniu Expression właściwości.