DataColumn.Expression Vlastnost

Definice

Získá nebo nastaví výraz použitý k filtrování řádků, výpočet hodnot ve sloupci nebo vytvoření agregačního sloupce.

public:
 property System::String ^ Expression { System::String ^ get(); void set(System::String ^ value); };
public string Expression { get; [System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from types used in the expressions may be trimmed if not referenced directly.")] set; }
public string Expression { get; set; }
[System.Data.DataSysDescription("DataColumnExpressionDescr")]
public string Expression { get; set; }
[<set: System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("Members from types used in the expressions may be trimmed if not referenced directly.")>]
member this.Expression : string with 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

Hodnota vlastnosti

Výraz pro výpočet hodnoty sloupce nebo vytvoření agregačního sloupce. Návratový typ výrazu je určen sloupcem DataType .

Atributy

Výjimky

Vlastnost AutoIncrement je Unique nastavena na truehodnotu .

Při použití funkce CONVERT se výraz vyhodnotí jako řetězec, ale řetězec neobsahuje reprezentaci, kterou lze převést na parametr typu.

Při použití funkce CONVERT není požadované přetypování možné. Podrobné informace o možných přetypování najdete ve funkci Převod v následující části.

Při použití funkce SUBSTRING je počáteční argument mimo rozsah.

-Or-

Pokud použijete funkci SUBSTRING, argument délka je mimo rozsah.

Pokud použijete funkci DÉLKA nebo FUNKCI TRIM, výraz se nevyhodnotí jako řetězec. To zahrnuje výrazy, které se vyhodnotí jako Char.

Příklady

Následující příklad vytvoří tři sloupce v .DataTable Druhý a třetí sloupec obsahuje výrazy; Druhá vypočítá daň pomocí proměnné daňové sazby a třetí přidá výsledek výpočtu k hodnotě prvního sloupce. Výsledná tabulka se zobrazí v ovládacím DataGrid prvku.

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

Poznámky

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"

Note

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ána žádná výjimka. Při přístupu ke sloupci výrazu, který je nyní přerušený, 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 ` (apostrof). 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 jakékoli znaky ']' a '\' nahrazeny zpětným lomítkem před nimi ("\"). Pokud je název sloupce uzavřený do znaků zpětného apostrofu, nesmí obsahovat žádné zpětné apostrofy. 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 apostrofů (a každý znak apostrofů v řetězcové hodnotě musí být upraven přidáním dalšího znaku apostrofů před něj). Hodnoty kalendářních dat by měly být uzavřeny do mřížek (#) nebo jednoduchých uvozovek (') v závislosti 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 analýze a převodu literálových výrazů s využitím DataSet se vždy používá invariantní kultura, nikoli aktuální kultura.

Ř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.

Reálné literály, které používají vědecký zápis, například 4,42372E-30, jsou analyzovány pomocí System.Double.

Číselné 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.

Operators

Zřetězení je povoleno pomocí logických operátorů AND, OR nebo 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í)
  • / (dělení)
  • % (modul)

Ř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 * a % lze v porovnání typu LIKE používat 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í povolen.

Odkazování na vztah nadřazenosti a podřízenosti

Na nadřazenou tabulku lze ve výrazu odkazovat tak, že před názvem sloupce použijete Parent. Například Parent.Price odkazuje na sloupec nadřazené tabulky s názvem Price.

Pokud má dítě více než jednoho nadřazeného, 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 má tabulka více než jeden podřízený prvek, 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)

Aggregates

Podporují se následující agregační typy:

  • Sum (Součet)
  • Avg (Průměr)
  • Min (Minimum)
  • Max (Maximální)
  • Count (Počet)
  • StDev (Statistická směrodatná odchylka)
  • Var (Statistická odchylka)

Agregace se obvykle provádějí na základě vztahů. 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)

Note

Pokud k vytvoření agregace použijete jednu tabulku, nebude k dispozici funkce pro seskupování. 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 Description
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 z a do Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String a na sebe samého. Char lze převést do a z Int32, UInt32, String, a sám pouze. DateTime může být převeden na a z String a pouze na sebe. TimeSpan může být převeden na a z String a pouze na sebe.

LEN

Tato funkce získá délku řetězce.

LEN(expression)
Argumenty Description
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 Description
expression Výraz, který chcete zkontrolovat.
replacementvalue Pokud je výraz null, vrátí se replacementvalue.

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 Description
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 nepravdivý.

Příklad: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

Tato funkce odebere všechny počáteční a koncové prázdné znaky, jako jsou \r, \n, \t a '.

TRIM(expression)
Argument Description
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 Description
expression Zdrojový řetězec podřetězce
start Celé číslo, které určuje, kde se podřetězec začíná.
length Celé číslo, které určuje délku podřetězce.

Příklad: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Note

Vlastnost Expression můžete resetovat 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 .

Platí pro

Viz také