DataColumn.Expression Tulajdonság
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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 lett
Decimal. - 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:
- <
- >
- <=
- >=
- =
INLIKE
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.