System.Data.DataColumn.Expression – vlastnost
Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.
Jedním z použití Expression vlastnosti je vytvoření počítaných sloupců. Například k výpočtu daňové hodnoty se jednotková cena vynásobí sazbou daně konkrétní oblasti. Vzhledem k tomu, že daňové sazby se liší od oblasti po oblast, není možné do sloupce vložit jedinou sazbu daně; místo toho se hodnota vypočítá pomocí Expression vlastnosti, jak je znázorněno v následujícím kódu:
DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"
Druhým použitím je vytvoření agregovaného sloupce. Podobně jako počítaná hodnota provádí agregace operaci na základě kompletní sady řádků v objektu DataTable. Jednoduchým příkladem je spočítat počet řádků vrácených v sadě. Jedná se o metodu, pomocí které byste spočítali počet transakcí dokončených konkrétním prodejcem, jak je znázorněno v následujícím kódu:
DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"
Syntaxe výrazů
Při vytváření výrazu ColumnName použijte vlastnost odkazující na sloupce. Pokud ColumnName je například pro jeden sloupec "UnitPrice" a další "Quantity", výraz je:
"UnitPrice * Quantity"
Poznámka:
Pokud se sloupec používá ve výrazu, znamená to, že výraz má závislost na daném sloupci. Pokud je závislý sloupec přejmenován nebo odebrán, není vyvolán žádná výjimka. Při přístupu ke sloupci nyní přerušeného výrazu dojde k výjimce.
Když vytvoříte výraz pro filtr, uzavřete řetězce do jednoduchých uvozovek:
"LastName = 'Jones'"
Pokud název sloupce obsahuje jakékoli jiné než alfanumerické znaky, začíná číslicí nebo odpovídá (nerozlišuje velká a malá písmena) některá z následujících rezervovaných slov, vyžaduje zvláštní zpracování, jak je popsáno v následujících odstavcích.
And
Between
Child
False
In
Is
Like
Not
Null
Or
Parent
True
Pokud název sloupce splňuje jednu z předchozích podmínek, musí být zabalený do hranatých závorek nebo do uvozovek "'" (zvýraznění hrobu). Pokud například chcete ve výrazu použít sloupec s názvem Sloupec#, napíšete buď "[Column#]", nebo "'Column#'":
Total * [Column#]
Pokud je název sloupce uzavřený v hranatých závorkách, musí být uvozen znakem zpětného lomítka ("\") a "\" (ale ne žádné jiné znaky). Pokud je název sloupce uzavřený do znaků se zvýrazňujícími čárkou, nesmí obsahovat žádné znaky s diakritikou. Například sloupec s názvem "Column[]\" by se napsal:
Total * [Column[\]\\]
nebo
Total * 'Column[]\'
Uživatelem definované hodnoty
Uživatelem definované hodnoty lze použít ve výrazech, které se mají porovnat s hodnotami sloupců. Řetězcové hodnoty by měly být uzavřeny do jednoduchých uvozovek (přičemž každý jeden uvozovek v řetězcové hodnotě musí být uvozovek. Hodnoty kalendářních dat by měly být uzavřeny do znaků libry (#) nebo jednoduchých uvozovek (') založených na poskytovateli dat. Desetinná místa a vědecký zápis jsou pro číselné hodnoty přípustné. Příklad:
"FirstName = 'John'"
"Price <= 50.00"
"Birthdate < #1/31/2006#"
U sloupců obsahujících hodnoty výčtu přetypujte hodnotu na datový typ celé číslo. Příklad:
"EnumColumn = 5"
Parsování literálových výrazů
Všechny literální výrazy musí být vyjádřeny v invariantní jazykové národní prostředí. Při DataSet
analýze a převodu literálových výrazů se vždy používá invariantní jazyková verze, nikoli aktuální jazyková verze.
Řetězcové literály jsou identifikovány, pokud jsou kolem hodnoty jednoduché uvozovky. Například 'John'
.
Boolean
literály jsou true
a false
; nejsou ve výrazech uvozovány.
Integer
literály [+-]? [0-9]+ jsou považovány za System.Int32
, System.Int64
nebo System.Double
. System.Double
může ztratit přesnost v závislosti na velikosti čísla. Pokud je například číslo v literálu 2147483650, DataSet
pokusí se číslo nejprve analyzovat jako .Int32
Nebude to úspěšné, protože číslo je příliš velké. V tomto případě DataSet
parsuje číslo jako hodnotu Int64
, která bude úspěšná. Pokud je literál číslo větší než maximální hodnota int64, DataSet
parsuje literál pomocí Double
.
Skutečné literály, které používají vědecký zápis, například 4,42372E-30, jsou analyzovány pomocí System.Double
.
Skutečné literály bez vědeckého zápisu, ale s desetinnou čárkou, jsou považovány za System.Decimal
. Pokud číslo překročí maximální nebo minimální hodnoty, které System.Decimal
podporuje , pak se analyzuje jako System.Double
. Příklad:
- 142526.144524 je převeden na .
Decimal
- 345262.78036719560925667 je považován za
Double
.
Operátory
Zřetězení je povoleno pomocí logických operátorů AND, OR a NOT. K seskupení klauzulí a vynucení priority můžete použít závorky. Operátor AND má přednost před jinými operátory. Příklad:
(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'
Při vytváření porovnávacích výrazů jsou povoleny následující operátory:
- <
- >
- <=
- >=
- =
IN
LIKE
Výrazy podporují také následující aritmetické operátory:
- + (sčítání)
- - (odčítání)
- * (násobení)
- / (divize)
- % (moduls)
Řetězcové operátory
Ke zřetězení řetězce použijte +
znak. Hodnota CaseSensitive vlastnosti DataSet třídy určuje, zda porovnání řetězců rozlišují malá a velká písmena. Tuto hodnotu CaseSensitive však můžete přepsat vlastností DataTable třídy.
Zástupné znaky
*
Znaky i %
znaky se dají v porovnání LIKE zaměnitelně pro zástupné znaky. Pokud řetězec v klauzuli LIKE obsahuje *
nebo %
, měly by být tyto znaky uzavřeny v hranatých závorkách ([]
). Pokud je v klauzuli závorka, musí být každý znak závorky uzavřený v hranatých závorkách (například [[]
[]]
). Zástupný znak je povolený na začátku a na konci vzoru nebo na konci vzoru nebo na začátku vzoru. Příklad:
"ItemName LIKE '*product*'"
"ItemName LIKE '*product'"
"ItemName LIKE 'product*'"
Zástupné znaky nejsou povoleny uprostřed řetězce. Například 'te*xt'
není povoleno.
Odkazování na vztah nadřazenosti a podřízenosti
Na nadřazenou tabulku lze ve výrazu odkazovat tak, že před Parent
název sloupce použijete . Například Parent.Price
odkazuje na sloupec nadřazené tabulky s názvem Price
.
Pokud má podřízený řádek více než jeden nadřazený řádek, použijte Parent(RelationName).ColumnName
. Například Parent(RelationName).Price
odkazuje na sloupec nadřazené tabulky s názvem Price (Cena) prostřednictvím relace.
Na sloupec v podřízené tabulce lze ve výrazu odkazovat tak, že před název sloupce použijete Child
. Vzhledem k tomu, že podřízené relace můžou vracet více řádků, musíte do agregační funkce zahrnout odkaz na podřízený sloupec. Například Sum(Child.Price)
vrátí součet sloupce pojmenovaného Price
v podřízené tabulce.
Pokud tabulka obsahuje více než jedno podřízené, syntaxe je: Child(RelationName)
. Pokud má například tabulka dvě podřízené tabulky s názvem Customers
a Orders
objekt DataRelation je pojmenovaný Customers2Orders
, odkaz by byl následující:
Avg(Child(Customers2Orders).Quantity)
Souhrny
Podporují se následující agregační typy:
Sum
(Součet)Avg
(Průměr)Min
(Minimum)Max
(Maximum)Count
(Počet)StDev
(Statistická směrodatná odchylka)Var
(Statistická odchylka)
Agregace se obvykle provádějí společně s relacemi. Vytvořte agregační výraz pomocí některé z funkcí uvedených dříve a podřízeného sloupce tabulky, jak je podrobně popsáno v odkazu na vztah nadřazenosti/podřízenosti. Příklad:
Avg(Child.Price)
Avg(Child(Orders2Details).Price)
Agregaci je možné provést také v jedné tabulce. Pokud například chcete vytvořit souhrn obrázků ve sloupci s názvem "Cena":
Sum(Price)
Poznámka:
Pokud k vytvoření agregace použijete jednu tabulku, nebude k dispozici žádná funkce seskupit podle. Místo toho by všechny řádky zobrazovaly stejnou hodnotu ve sloupci.
Pokud tabulka neobsahuje žádné řádky, agregační funkce vrátí null
.
Datové typy lze vždy určit prozkoumáním DataType vlastnosti sloupce. Datové typy můžete také převést pomocí Convert
funkce, jak je znázorněno v následující části.
Agregaci lze použít pouze na jeden sloupec a uvnitř agregace se nedají použít žádné jiné výrazy.
Functions
Podporují se také následující funkce.
CONVERT
Tato funkce převede výraz na zadaný typ .NET.
Convert(expression, type)
Argument | Popis |
---|---|
expression |
Výraz, který se má převést. |
type |
Typ .NET, na který se hodnota převede. |
Příklad: myDataColumn.Expression="Convert(total, 'System.Int32')"
Všechny převody jsou platné s následujícími výjimkami: Boolean
lze převést na a z Byte
, , Int16
SByte
, , Int32
, , Int64
, , UInt16
, UInt32
UInt64
String
a pouze sám. Char
lze převést do a z Int32
, UInt32
, String
, a sám pouze. DateTime
může být přetěžován pouze na a ze sebe i od String
sebe. TimeSpan
může být přetěžován pouze na a ze sebe i od String
sebe.
LEN
Tato funkce získá délku řetězce.
LEN(expression)
Argumenty | Popis |
---|---|
expression |
Řetězec, který se má vyhodnotit. |
Příklad: myDataColumn.Expression="Len(ItemName)"
ISNULL
Tato funkce zkontroluje výraz a vrátí kontrolované výrazy nebo náhradní hodnotu.
ISNULL(expression, replacementvalue)
Argumenty | Popis |
---|---|
expression |
Výraz, který chcete zkontrolovat. |
replacementvalue |
Pokud je null výraz , replacementvalue je vrácen. |
Příklad: myDataColumn.Expression="IsNull(price, -1)"
IIF
Tato funkce získá jednu ze dvou hodnot v závislosti na výsledku logického výrazu.
IIF(expr, truepart, falsepart)
Argumenty | Popis |
---|---|
expr |
Výraz, který se má vyhodnotit. |
truepart |
Hodnota, která se má vrátit, pokud je výraz pravdivý. |
falsepart |
Hodnota, která se má vrátit, pokud je výraz false. |
Příklad: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')
TRIM
Tato funkce odebere všechny počáteční a koncové prázdné znaky, jako je \r, \n, \t a '.
TRIM(expression)
Argument | Popis |
---|---|
expression |
Výraz, který se má oříznout. |
SUBSTRING
Tato funkce získá podřetězce zadané délky počínaje zadaným bodem v řetězci.
SUBSTRING(expression, start, length)
Argument | Popis |
---|---|
expression |
Zdrojový řetězec podřetězce |
start |
Celé číslo, které určuje, kde se podřetěžek spouští. |
length |
Celé číslo, které určuje délku podřetědce. |
Příklad: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"
Poznámka:
Vlastnost můžete resetovat Expression přiřazením hodnoty null nebo prázdného řetězce. Pokud je ve sloupci výrazu nastavena výchozí hodnota, všechny dříve vyplněné řádky jsou po resetování vlastnosti přiřazeny výchozí hodnotu Expression .