Nyelv

DataColumn.Expression Tulajdonság

Definíció

Lekéri vagy beállítja a sorok szűréséhez, az oszlopok értékeinek kiszámításához vagy összesített oszlop létrehozásához használt kifejezést.

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

Tulajdonság értéke

Egy oszlop értékének kiszámítására vagy összesített oszlop létrehozására vonatkozó kifejezés. A kifejezés visszatérési típusát az DataType oszlop határozza meg.

Attribútumok

Kivételek

A AutoIncrement vagy Unique a tulajdonság értéke .true

A KONVERTÁLÁS függvény használatakor a kifejezés sztringgé lesz kiértékelve, de a sztring nem tartalmaz olyan reprezentációt, amely átalakítható a típusparaméterre.

A KONVERTÁLÁS függvény használatakor a kért leadás nem lehetséges. A lehetséges leadásokról a következő szakaszban található Konverzió függvény nyújt részletes tájékoztatást.

Ha a SUBSTRING függvényt használja, a kezdő argumentum kívül esik a tartományon.

-Or-

Ha a SUBSTRING függvényt használja, a hosszargumentum túllépi a tartományt.

Ha a LEN vagy a TRIM függvényt használja, a kifejezés nem lesz sztringre kiértékelve. Ide tartoznak azok a kifejezések, amelyek kiértékelése a következőre történik Char: .

Példák

Az alábbi példa három oszlopot hoz létre egy DataTable. A második és a harmadik oszlop kifejezéseket tartalmaz; a második változó adókulcs használatával számítja ki az adót, a harmadik pedig hozzáadja a számítás eredményét az első oszlop értékéhez. Az eredményként kapott tábla egy DataGrid vezérlőelemben jelenik meg.

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

Megjegyzések

A tulajdonság egyik használati módja a számított Expression oszlopok létrehozása. Egy adóérték kiszámításához például az egységár megszorozva van egy adott régió adómértékével. Mivel az adókulcsok régiónként eltérőek, lehetetlen egyetlen adókulcsot elhelyezni egy oszlopban; ehelyett az érték kiszámítása a Expression tulajdonság használatával történik, ahogyan az a következő kódban is látható:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

A második lehetőség egy összesített oszlop létrehozása. A számított értékhez hasonlóan az összesítés a DataTable teljes sorhalmaza alapján hajt végre műveletet. Egy egyszerű példa a készletben visszaadott sorok számának megszámlálása. Ez az a módszer, amelyet egy adott értékesítő által végrehajtott tranzakciók számának megszámlálásához használna, ahogyan az az alábbi kódban is látható:

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

Kifejezés szintaxisa

Kifejezés létrehozásakor használja a tulajdonságot az ColumnName oszlopokra való hivatkozáshoz. Ha például az ColumnName egyik oszlop értéke "UnitPrice", a másik pedig "Mennyiség", akkor a kifejezés a következő:

"UnitPrice * Quantity"

Note

Ha egy kifejezésben oszlopot használnak, akkor a rendszer azt mondja, hogy a kifejezés függ az adott oszloptól. Ha egy függő oszlopot átneveznek vagy eltávolítanak, a rendszer nem ad kivételt. A rendszer kivételt dob, amikor a most már hibás kifejezésoszlopot elérik.

Amikor létrehoz egy kifejezést egy szűrőhöz, a karakterláncokat zárja be egyes idézőjel közé:

"LastName = 'Jones'"

Ha egy oszlopnév nem alfanumerikus karaktereket tartalmaz, számjegygel kezdődik, vagy a következő fenntartott szavak bármelyikével (kis- és nagybetűkkel) egyezik, speciális kezelést igényel az alábbi bekezdésekben leírtak szerint.

And

Between

Child

False

In

Is

Like

Not

Null

Or

Parent

True

Ha egy oszlopnév megfelel az előző feltételek egyikének, akkor szögletes zárójelbe vagy "'" (ékezetes) idézőjelek közé kell burkolni. Ha például egy "Oszlop#" nevű oszlopot szeretne használni egy kifejezésben, a következőt kell írnia: "[Oszlop#]" vagy "Oszlop#":

Total * [Column#]

Ha az oszlop neve szögletes zárójelek közé van foglalva, akkor a benne lévő ']' és '\' karaktereket (de más karaktereket nem) meg kell szökni úgy, hogy eléjük tesszük a fordított perjel ("\") karaktert. Ha az oszlop neve sírjelek közé van ágyazva, akkor nem tartalmazhat sírjeleket. Egy "Column[]\" nevű oszlop például a következő lesz:

Total * [Column[\]\\]

vagy

Összesen * `Oszlop[]\`

Felhasználó által definiált értékek

A felhasználó által definiált értékek az oszlopértékekkel összehasonlítandó kifejezésekben használhatók. A sztringértékeket egyes idézőjelek közé kell zárni (és a sztringértékben minden egyes egyes idézőjelet egy másik egyes idézőjellel kell megadni). A dátumértékeket az adatszolgáltatótól függően fontjelek (#) vagy egy idézőjelek (') közé kell tenni. Numerikus értékek esetében a tizedesvessző és a tudományos jelölés megengedett. Például:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/2006#"

Az enumerálási értékeket tartalmazó oszlopok esetében az értéket egész szám adattípusra kell leadni. Például:

"EnumColumn = 5"

Literális kifejezések elemzése

Az összes literális kifejezést az invariáns kulturális területi beállításban kell kifejezni. A literális kifejezések elemzésekor és konvertálásakor DataSet mindig az invariáns kultúrát használja, nem a jelenlegi kultúrát.

A sztringkonstansokat akkor azonosítja a rendszer, ha egyetlen idézőjel található az érték körül. Például: 'John'.

Boolean és truefalse literálok; a kifejezésekben nem idézik őket.

Integer literálok [+-]?[0-9]+ értékeket mint System.Int32, System.Int64 vagy System.Double kezeli a rendszer. System.Double pontossága a szám nagyságától függően csökkenhet. Ha például a literális szám 2147483650, DataSet először megkísérli a számot Int32-ként elemezni. Ez nem fog sikerülni, mert a szám túl nagy. Ebben az esetben a DataSet elemezni próbálja a számot mint Int64, ami sikeres lesz. Ha a literál egy Int64 maximális értékénél nagyobb szám, DataSet akkor a literál elemzése a következővel történik Double: .

A tudományos jelölést (például 4.42372E-30) használó valós literálokat a System.Double használatával elemzik.

A valódi, tudományos jelölés nélküli, de decimális ponttal rendelkező literálokat a rendszer úgy kezeli, mint System.Decimal. Ha a szám meghaladja a támogatott System.Decimalmaximális vagy minimális értékeket, akkor a rendszer a következőképpen elemzi System.Doublea számot. Például:

  • A 142526.144524 konvertálva lettDecimal.
  • A 345262.78036719560925667-et Double-ként kezelik.

Operators

Az összefűzés logikai ÉS, OR és NOT operátorokkal engedélyezett. Zárójelek használatával csoportosíthatja a kifejezéseket, és megadhatja az elsőbbséget. Az AND operátor elsőbbséget élvez más operátorokkal szemben. Például:

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

Összehasonlító kifejezések létrehozásakor a következő operátorok engedélyezettek:

  • <
  • >
  • <=
  • >=
  • =
  • IN
  • LIKE

A kifejezésekben a következő aritmetikai operátorok is támogatottak:

  • + (kiegészítés)
  • - (kivonás)
  • * (szorzás)
  • / (osztás)
  • % (moduló)

Karakterlánc operátorok

Sztring összefűzéséhez használja a karaktert + . A CaseSensitive osztály DataSet tulajdonságának értéke határozza meg, hogy a sztring-összehasonlítások megkülönböztetik-e a kis- és nagybetűket. Ezt az értéket azonban felülbírálhatja az CaseSensitiveDataTable osztály tulajdonságával.

Helyettesítő karakterek

A * és % karakterek egyaránt használhatók helyettesítő karakterekként a LIKE összehasonlításban. Ha a LIKE záradék sztringje tartalmaz egy * vagy %, ezeket a karaktereket szögletes zárójelek közé kell tenni ([]). Ha egy szögletes zárójel szerepel a záradékban, minden szögletes zárójel karaktert szögletes zárójelek közé kell tenni (például [[] vagy []]). A helyettesítő karakter a minta elején és végén, vagy csak a minta végén, illetve csak a minta elején is engedélyezett. Például:

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

Karakterlánc közepén helyettesítő karakterek nem használhatók. A 'te*xt' például nem engedélyezett.

Szülő-gyermek kapcsolatra való hivatkozás

Egy szülőtábla egy kifejezésben úgy hivatkozható, hogy az oszlop nevét Parent-vel előtagoljuk. Hivatkozik például Parent.Price a szülőtábla nevesített Priceoszlopára.

Amikor egy gyermeknek több szülősora van, használja Parent(RelationName).ColumnName. Például a Parent(RelationName).Price a szülőtábla "Ár" nevű oszlopára hivatkozik a kapcsolaton keresztül.

Egy gyermektábla oszlopára hivatkozhat egy kifejezésben az oszlop neve elé Child előtagot helyezve. Mivel azonban a gyermekkapcsolatok több sort is visszaadhatnak, a gyermekoszlopra mutató hivatkozást egy összesítő függvényben kell szerepeltetni. Például Sum(Child.Price) a gyermektáblában elnevezett Price oszlop összegét adja vissza.

Ha egy tábla több gyermekből áll, a szintaxis a következő: Child(RelationName). Ha például egy táblának két gyermektáblája van, Customers és Ordersaz DataRelation objektum neve el van nevezve Customers2Orders, a hivatkozás a következő:

Avg(Child(Customers2Orders).Quantity)

Aggregates

A következő összesítési típusok támogatottak:

  • Sum (Összeg)
  • Avg (Átlag)
  • Min (Minimális)
  • Max (Maximális)
  • Count (Darabszám)
  • StDev (Statisztikai szórás)
  • Var (Statisztikai eltérés)

Az aggregátumok általában kapcsolatok mentén vannak végrehajtva. Hozzon létre egy összesített kifejezést a korábban felsorolt függvények egyikével és egy gyermektábla oszlopával a Szülő/gyermek kapcsolat hivatkozásában leírtak szerint. Például:

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

Az összesítés egyetlen táblán is elvégezhető. Például a számok összegzésének létrehozása egy "Price" nevű oszlopban:

Sum(Price)

Note

Ha egyetlen táblát használ az összesítés létrehozásához, akkor nem lesznek csoportosítási funkciók. Ehelyett minden sor ugyanazt az értéket jeleníti meg az oszlopban.

Ha egy táblának nincsenek sorai, az összesítő függvények null értéket adnak vissza.

Az adattípusok mindig meghatározhatók egy DataType oszlop tulajdonságának vizsgálatával. Az adattípusokat a Convert függvény használatával is konvertálhatja, az alábbi szakaszban látható módon.

Az összesítés csak egyetlen oszlopra alkalmazható, és az összesítésen belül más kifejezés nem használható.

Functions

Az alábbi függvények is támogatottak.

CONVERT

Ez a függvény egy kifejezést egy megadott .NET-típussá alakít át.

Convert(expression, type)
Argument Description
expression Az átalakítandó kifejezés.
type .NET-típus, amelyre az érték konvertálva lesz.

Például: myDataColumn.Expression="Convert(total, 'System.Int32')"

Az összes konverzió a következő kivételekkel érvényes: Boolean csak Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String és önmagára kényszeríthető. Char csak a Int32, UInt32, String és önmagára kényszeríthető. DateTime csak String és önmaga között kényszeríthető át. TimeSpan csak String és önmaga között kényszeríthető át.

LEN

Ez a függvény egy karakterlánc hosszát adja vissza.

LEN(expression)
Arguments Description
expression A kiértékelendő karakterlánc.

Például: myDataColumn.Expression="Len(ItemName)"

ISNULL

Ez a függvény egy kifejezést ellenőriz, és vagy az ellenőrzött kifejezést vagy egy helyettesítő értéket ad vissza.

ISNULL(expression, replacementvalue)
Arguments Description
expression Az ellenőrizni kívánt kifejezés.
replacementvalue Ha a kifejezés null, akkor replacementvalue kerül visszaadásra.

Például: myDataColumn.Expression="IsNull(price, -1)"

IIF

Ez a függvény egy logikai kifejezés eredményétől függően két érték egyikét kapja meg.

IIF(expr, truepart, falsepart)
Arguments Description
expr A kiértékelendő kifejezés.
truepart A visszaadandó érték, ha a kifejezés igaz.
falsepart A visszaadandó érték, ha a kifejezés hamis.

Például: myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM

Ez a függvény eltávolítja az összes kezdő és záró üres karaktert, például \r, \n, \t és ' ' karaktert.

TRIM(expression)
Argument Description
expression A levágni kívánt kifejezés.

SUBSTRING

Ez a függvény egy megadott hosszúságú részszúrást kap, amely a sztring egy megadott pontján kezdődik.

SUBSTRING(expression, start, length)
Argument Description
expression Az alkarakterlánc forráskarakterlánca
start Egész szám, amely meghatározza, hogy hol kezdődik a részszöveg.
length Az alsztring hosszát meghatározó egész szám.

Például: myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

Note

A tulajdonság alaphelyzetbe állításához Expression null értéket vagy üres karakterláncot rendelhet hozzá. Ha a kifejezés oszlopában egy alapértelmezett érték van beállítva, a rendszer a tulajdonság alaphelyzetbe állítása után az összes korábban kitöltött sort hozzárendeli az Expression alapértelmezett értékhez.

A következőre érvényes:

Lásd még