Expression syntax
Wanneer u een expressie maakt, gebruikt u de eigenschap Kolomnaam om naar kolommen te verwijzen. Als de kolomnaam voor één kolom bijvoorbeeld "Eenheidsprijs" is en een andere "Hoeveelheid", zou de uitdrukking als volgt zijn: "Eenheidsprijs * Aantal"
Let op!
Als een kolom in een uitdrukking wordt gebruikt, wordt gezegd dat de uitdrukking afhankelijk is van die kolom. Als een afhankelijke kolom wordt hernoemd of verwijderd, wordt er geen uitzondering gegenereerd. Er wordt een uitzondering gegenereerd wanneer de nu gebroken expressiekolom wordt geopend. Wanneer u een uitdrukking voor een filter maakt, plaatst u tekenreeksen tussen enkele aanhalingstekens: "Achternaam = 'Jones'" Als een kolomnaam niet-alfanumerieke tekens bevat of met een cijfer begint of (hoofdlettergevoelig) overeenkomt met een van de volgende gereserveerde woorden, vereist deze speciale behandeling, zoals beschreven in de volgende paragrafen.
Wanneer u een uitdrukking voor een filter maakt, plaatst u tekenreeksen tussen enkele aanhalingstekens: "Achternaam = 'Jones'"
Als een kolomnaam niet-alfanumerieke tekens bevat of met een cijfer begint of (hoofdlettergevoelig) overeenkomt met een van de volgende gereserveerde woorden, vereist deze speciale behandeling, zoals beschreven in de volgende paragrafen. De gereserveerde woorden zijn: And, Between, Child, False, In, Is, Like, Not, Null, Or, Parent, True.
Als een kolomnaam aan een van de bovenstaande voorwaarden voldoet, moet deze tussen vierkante haken [ ] of tussen aanhalingstekens ' ' worden geplaatst. Als u bijvoorbeeld een kolom met de naam "Kolom#" in een expressie wilt gebruiken, schrijft u de kolomnaam zoals de volgende opties:
-
"[Kolom#]" : Totaal * [Kolom#]
-
"
Kolom#" : Totaal *Kolom#
Als de kolomnaam tussen vierkante haken staat, moeten alle ']'- en '\'-tekens (maar geen andere tekens) worden omsloten door ze vooraf te laten gaan door de backslash ("\"). Als de kolomnaam is ingesloten in aanhalingstekens, mag deze geen aanhalingstekens bevatten. Een kolom met de naam "Kolom[]\" zou bijvoorbeeld worden geschreven:
-
Totaal * [Kolom[]\]
-
Totaal *
Kolom[]\
Door de gebruiker gedefinieerde waarden
Door de gebruiker gedefinieerde waarden kunnen worden gebruikt binnen expressies om te worden vergeleken met kolomwaarden. Tekenreekswaarden moeten tussen enkele aanhalingstekens staan (en elk afzonderlijk aanhalingsteken in een tekenreekswaarde moet worden ontsnapt door er een ander enkel aanhalingsteken voor te plaatsen). Datumwaarden moeten worden ingesloten tussen hekjes (#) of enkele aanhalingstekens (') op basis van de gegevensprovider. Decimalen en wetenschappelijke notatie zijn toegestaan voor numerieke waarden. Bijvoorbeeld:
- "Voornaam = 'Jan'"
- "Prijs <= 50,00"
- "Geboortedatum < #1/31/82#"
Voor kolommen die opsommingswaarden bevatten, cast de waarde naar een gegevenstype met een geheel getal. Bijvoorbeeld:
- "EnumKolom = 5"
Letterlijke uitdrukkingen
Alle letterlijke uitdrukkingen moeten worden uitgedrukt in de cultuur-onafhankelijke instelling. Wanneer DataSet letterlijke uitdrukkingen ontleedt en converteert, gebruikt het altijd de invariante cultuur, niet de huidige cultuur.
Letterlijke tekenreeksen worden geïdentificeerd als er enkele aanhalingstekens om de waarde staan.
- Bijvoorbeeld: 'John'
Booleaanse letterlijke termen zijn waar en onwaar; ze worden niet geciteerd in uitdrukkingen.
Integer letterlijke waarden [+-]?[0-9]+ worden behandeld als System.Int32, System.Int64 of System.Double. System.Double kan precisie verliezen, afhankelijk van hoe groot het getal is. Als het nummer in de letterlijke waarde bijvoorbeeld 2147483650 is, zal DataSet eerst proberen het nummer te ontleden als een Int32. Dit zal niet lukken omdat het aantal te groot is. In dit geval zal DataSet het nummer ontleden als een Int64, wat zal lukken. Als de letterlijke waarde een getal is dat groter is dan de maximale waarde van een Int64, zal DataSet de letterlijke waarde ontleden met Double.
Echte letterlijke waarden die wetenschappelijke notatie gebruiken, zoals 4.42372E-30, worden ontleed met System.Double.
Echte letterlijke waarden zonder wetenschappelijke notatie, maar met een decimaalteken, worden behandeld als System.Decimal. Als het getal de maximum- of minimumwaarden overschrijdt die worden ondersteund door System.Decimal, wordt het geparseerd als een System.Double. Bijvoorbeeld:
-
142526.144524 wordt geconverteerd naar een Decimal.
-
345262.78036719560925667 wordt behandeld als een Double.
Operators
Aaneenschakeling is toegestaan met behulp van Booleaanse AND-, OR- en NOT-operatoren. U kunt haakjes gebruiken om clausules te groeperen en voorrang af te dwingen. De AND-operator heeft voorrang op andere operators. Bijvoorbeeld:
- (Achternaam = 'Smith' OF Achternaam = 'Jones') AND Voornaam = 'John'
Wanneer u vergelijkingsexpressies maakt, zijn de volgende operators toegestaan: <, >, <=, >=, <>, =, IN, LIKE. De volgende rekenkundige operatoren worden ook ondersteund in expressies: + (toevoeging), - (aftrekken,) * (vermenigvuldiging), / (divisie), % (modulus).
String-operators
Gebruik het +teken om een string samen te voegen. De waarde van de eigenschap CaseSensitive van de klasse DataSet bepaalt of tekenreeksvergelijkingen hoofdlettergevoelig zijn. U kunt die waarde echter overschrijven met de eigenschap CaseSensitive van de klasse DataTable.
Wildcard Characters
Zowel het * als het % kunnen door elkaar worden gebruikt voor jokertekens in een LIKE-vergelijking. Als de tekenreeks in een LIKE-component een * of % bevat, moeten die tekens tussen haakjes staan ([]). Als er een haakje in de clausule staat, moet elk haakje tussen haakjes staan (bijvoorbeeld [[] of []]). Een jokerteken is toegestaan aan het begin en einde van een patroon, of aan het einde van een patroon, of aan het begin van een patroon. Bijvoorbeeld:
-
"Artikelnaam LIKE 'product'"
-
"Artikelnaam LIKE '*product'"
-
"Artikelnaam LIKE 'product*'"
Jokertekens zijn niet toegestaan in het midden van een string. 'te*xt' is bijvoorbeeld niet toegestaan.
Verwijzingen naar Parent/Child relatie
Er kan in een expressie naar een bovenliggende tabel worden verwezen door de kolomnaam voor Parent te plaatsen. De Parent.Prijs verwijst bijvoorbeeld naar de kolom van de bovenliggende tabel met de naam Prijs.
Als een Child tabel meer dan één bovenliggende rij heeft, gebruikt u Parent(RelatieNaam).KolomNaam. De Parent(RelatieNaam).Prijs verwijst bijvoorbeeld via de relatie naar de kolom van de bovenliggende tabel met de naam Prijs.
Er kan in een expressie naar een kolom in een onderliggende tabel worden verwezen door de kolomnaam vooraf te laten gaan door Child. Omdat onderliggende relaties echter meerdere rijen kunnen retourneren, moet u de verwijzing naar de onderliggende kolom in een aggregatiefunctie opnemen. Sum(Child.Prijs) retourneert bijvoorbeeld de som van de kolom met de naam Prijs in de onderliggende tabel.
Als een tabel meer dan één Childtabel heeft, is de syntaxis: Child(RelatieNaam). Als een tabel bijvoorbeeld twee onderliggende tabellen heeft met de namen Customers en Orders, en het DataRelation-object de naam Customers2Orders heeft, is de verwijzing als volgt: AVG(Child(Customers2Orders). Hoeveelheid)
Aggregaten
De volgende aggregatietypen worden ondersteund: SUM(som), AVG(gemiddeld), Min(minimaal), Max(maximaal), Count(Tellen), StDev (Statistische standaarddeviatie), Var(Statistische variantie). Aggregaten worden gewoonlijk uitgevoerd langs relaties. Maak een aggregatie-expressie met behulp van een van de eerder genoemde functies en een onderliggende tabelkolom zoals beschreven in Verwijzingen naar Parent/Child-relatie die eerder is besproken. Bijvoorbeeld:
- AVG(Child.Prijs)
- AVG(Child(Customers2Orders).Prijs)
Een aggregatie kan ook worden uitgevoerd op een enkele tabel. Om bijvoorbeeld een samenvatting van cijfers te maken in een kolom met de naam "Prijs": Sum(Prijs)
Als u een enkele tabel gebruikt om een aggregaat te maken, zou er geen functionaliteit voor groeperen zijn. In plaats daarvan zouden alle rijen dezelfde waarde in de kolom weergeven.
Als een tabel geen rijen heeft, retourneren de aggregatiefuncties null.
Gegevenstypen kunnen altijd worden bepaald door de eigenschap DataType van een kolom te onderzoeken. U kunt gegevenstypen ook converteren met de functie Converteren, die in de volgende sectie wordt weergegeven.
Een aggregaat kan alleen worden toegepast op een enkele kolom en er kunnen geen andere expressies binnen het aggregaat worden gebruikt.
Functions
De volgende functies worden ook ondersteund:
CONVERT
| Parameter | Beschrijving |
|---|---|
| Functie | CONVERT |
| Converteert een bepaalde expressie naar een opgegeven .NET Framework-type. | |
| Syntaxis | CONVERT(expressie, type) |
| Argumenten | - expressie: De expressie die moet worden geconverteerd. |
| - type: .NET type waarnaar de waarde wordt geconverteerd. | |
| Voorbeeld | myDataColumn.Expression="Convert(total, 'System.Int32')" |
Alle conversies zijn geldig met de volgende uitzonderingen:
- Boolean kan alleen worden afgedwongen van en naar Byte, SByte, Int16, Int32, Int64, UInt16, UInt32, UInt64, String en zichzelf.
- Char kan alleen van en naar Int32, UInt32, String en zichzelf worden gedwongen.
- DateTime kan alleen van en naar String en zichzelf worden gedwongen.
- TimeSpan kan alleen van en naar String en zichzelf worden gedwongen.
LEN
| Parameter | Beschrijving |
|---|---|
| Functie | LEN |
| Krijgt de lengte van een string. | |
| Syntaxis | LEN(uitdrukking) |
| Argumenten | expressie: De tekenreeks die moet worden geëvalueerd. |
| Voorbeeld | myDataColumn.Expression="Len(ItemName)" |
ISNULL
| Parameter | Beschrijving |
|---|---|
| Functie | ISNULL |
| Controleert een uitdrukking en retourneert de aangevinkte uitdrukking of een vervangende waarde. | |
| Syntaxis | ISNULL(expressie; vervangingswaarde) |
| Argumenten | expressie: De expressie die moet worden gecontroleerd. |
| vervangingswaarde: Als expressie null is, wordt vervangingswaarde geretourneerd. | |
| Voorbeeld | myDataColumn.Expression="IsNull(prijs, -1)" |
IIF
| Parameter | Beschrijving |
|---|---|
| Functie | IIF |
| Krijgt een van de twee waarden, afhankelijk van het resultaat van een logische expressie. | |
| Syntaxis | IIF(expressie; true; false) |
| Argumenten | expressie: De uitdrukking die moet worden geëvalueerd. |
| true: De waarde die moet worden geretourneerd als de expressie waar is. | |
| false: De waarde die moet worden geretourneerd als de expressie onwaar is. | |
| Voorbeeld | myDataColumn.Expression = "IIF(totaal>1000, 'duur', 'beste')" |
TRIM
| Parameter | Beschrijving |
|---|---|
| Functie | TRIM |
| Verwijdert alle voorloop- en volgspatietekens zoals \r, \n, \t, ' ' | |
| Syntaxis | TRIM(expressie) |
| Argumenten | expressie: De expressie die moet worden bijgesneden. |
SUBSTRING
| Parameter | Beschrijving |
|---|---|
| Functie | SUBSTRING |
| Haalt een subtekenreeks op met een opgegeven lengte, beginnend op een opgegeven punt in de tekenreeks. | |
| Syntaxis | SUBSTRING(expressie; start; lengte) |
| Argumenten | expressie: De brontekenreeks voor de subtekenreeks. |
| start: Geheel getal dat aangeeft waar de subtekenreeks begint. | |
| lengte: Geheel getal dat de lengte van de subtekenreeks aangeeft. | |
| Voorbeeld | myDataColumn.Expression = "SUBSTRING(telefoon, 7, 8)" |
Let op!
U kunt de eigenschap Expression opnieuw instellen door er een null-waarde of een lege tekenreeks aan toe te wijzen. Als er een standaardwaarde is ingesteld voor de expressiekolom, krijgen alle eerder gevulde rijen de standaardwaarde toegewezen nadat de eigenschap Expression opnieuw is ingesteld.
Overgenomen van Microsoft: https://learn.microsoft.com/en-us/dotnet/api/system.data.datacolumn.expression?view=net-7.0&redirectedfrom=MSDN#System_Data_DataColumn_Expression