Sdílet prostřednictvím


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.Int64nebo 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ě DataSetparsuje čí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.Decimalpodporuje , 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 Parentná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 Ordersobjekt 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, , Int16SByte, , Int32, , Int64, , UInt16, UInt32UInt64String 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 nullvý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 .