Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
LINQ to Entities biedt ondersteuning voor Language-Integrated Query (LINQ) waarmee ontwikkelaars query's kunnen schrijven op basis van het conceptuele model van Entity Framework met behulp van Visual Basic of Visual C#. Query's voor Entity Framework worden vertegenwoordigd door opdrachtstructuurquery's die worden uitgevoerd op basis van de objectcontext. LINQ to Entities converteert Language-Integrated Queries (LINQ) naar commando-boomquery's, voert de query's uit op het Entity Framework en geeft objecten terug die zowel door het Entity Framework als door LINQ gebruikt kunnen worden. Hier volgt het proces voor het maken en uitvoeren van een LINQ to Entities-query:
Maak een ObjectQuery<T> exemplaar van ObjectContext.
Stel een LINQ-naar-entiteiten-query op in C# of Visual Basic met behulp van het ObjectQuery<T> exemplaar.
LinQ-standaardqueryoperators en -expressies converteren naar opdrachtstructuren.
Voer de query uit in de opdrachtstructuurweergave op basis van de gegevensbron. Eventuele uitzonderingen die tijdens de uitvoering op de gegevensbron worden gegenereerd, worden rechtstreeks doorgegeven aan de client.
Retourneer queryresultaten terug naar de client.
Een ObjectQuery-object maken
De ObjectQuery<T> algemene klasse vertegenwoordigt een query die een verzameling van nul of meer getypte entiteiten retourneert. Een objectquery wordt doorgaans samengesteld op basis van een bestaande objectcontext, in plaats van handmatig te worden samengesteld en behoort altijd tot die objectcontext. Deze context bevat de verbindings- en metagegevensgegevens die nodig zijn om de query op te stellen en uit te voeren. De ObjectQuery<T> algemene klasse implementeert de IQueryable<T> algemene interface, waarvan de opbouwmethoden LINQ-query's incrementeel kunnen maken. U kunt de compiler ook het type entiteiten laten afleiden met behulp van het C# var -trefwoord (Dim in Visual Basic, waarbij deductie van het lokale type is ingeschakeld).
De query's opstellen
Exemplaren van de ObjectQuery<T> algemene klasse, die de algemene IQueryable<T> interface implementeert, fungeren als de gegevensbron voor LINQ naar entiteiten-query's. In een query geeft u precies de informatie op die u uit de gegevensbron wilt ophalen. Een query kan ook opgeven hoe deze informatie moet worden gesorteerd, gegroepeerd en vormgegeven voordat deze wordt geretourneerd. In LINQ wordt een query opgeslagen in een variabele. Deze queryvariabele voert geen actie uit en retourneert geen gegevens; alleen de querygegevens worden opgeslagen. Nadat u een query hebt gemaakt, moet u die query uitvoeren om gegevens op te halen.
LINQ to Entities-query's kunnen worden samengesteld in twee verschillende syntaxis: queryexpressiesyntaxis en methoden-gebaseerde querysyntaxis. Syntaxis van query-expressies en op methoden gebaseerde querysyntaxis zijn nieuw in C# 3.0 en Visual Basic 9.0.
Zie Query's in LINQ naar entiteiten voor meer informatie.
Queryconversie
Om een LINQ-naar-entiteitenquery uit te voeren tegen het Entity Framework, moet de LINQ-query worden omgezet in een opdrachtenboomweergave die kan worden uitgevoerd tegen het Entity Framework.
LINQ-naar-entiteiten-query's bestaan uit LINQ-standaardqueryoperators (zoals Select, Where, en GroupBy) en uitdrukkingen (x > 10, Contact.LastName, enzovoort). LINQ-operators worden niet gedefinieerd door een klasse, maar zijn eerder methoden voor een klasse. In LINQ kunnen expressies alles bevatten dat is toegestaan door typen binnen de System.Linq.Expressions naamruimte en, met extensie, alles wat in een lambda-functie kan worden weergegeven. Dit is een superset van de expressies die zijn toegestaan door het Entity Framework, die per definitie zijn beperkt tot bewerkingen die zijn toegestaan op de database en die worden ondersteund door ObjectQuery<T>.
In Entity Framework worden zowel operators als expressies vertegenwoordigd door één typehiërarchie, die vervolgens in een opdrachtstructuur worden geplaatst. De opdrachtstructuur wordt door entity framework gebruikt om de query uit te voeren. Als de LINQ-query niet kan worden uitgedrukt als een opdrachtstructuur, wordt er een uitzondering gegenereerd wanneer de query wordt geconverteerd. De conversie van LINQ naar entiteitenquery's omvat twee subconversies: de conversie van de standaardqueryoperators en de conversie van de expressies.
Er zijn een aantal LINQ-standaardqueryoperators die geen geldige vertaling hebben in LINQ naar entiteiten. Pogingen om deze operators te gebruiken, resulteren in een uitzondering tijdens het vertalen van query's. Zie Ondersteunde en niet-ondersteunde LINQ-methoden (LINQ naar entiteiten) voor een lijst met ondersteunde LINQ to Entities-operators.
In het algemeen worden expressies in LINQ naar entiteiten geëvalueerd op de server, dus het gedrag van de expressie mag niet worden verwacht om clr-semantiek te volgen. Zie Expressies in LINQ naar entiteitenquery's voor meer informatie.
Zie CLR Method to Canonical Function Mapping voor informatie over hoe CLR-methode-aanroepen worden toegewezen aan canonieke functies in de gegevensbron.
Zie Functies aanroepen in LINQ naar Entiteiten-query's voor informatie over het aanroepen van canonieke, database- en aangepaste functies vanuit LINQ naar Entiteiten-query's.
Queryuitvoering
Nadat de LINQ-query is gemaakt door de gebruiker, wordt deze geconverteerd naar een weergave die compatibel is met entity framework (in de vorm van opdrachtstructuren), die vervolgens wordt uitgevoerd op basis van de gegevensbron. Tijdens de uitvoering van query's worden alle query-expressies (of onderdelen van de query) geëvalueerd op de client of op de server. Dit omvat expressies die worden gebruikt in resultaat materialisatie of entiteitsprojecties. Zie Queryuitvoering voor meer informatie. Zie Compiled Query's (LINQ to Entities) voor informatie over het verbeteren van de prestaties door een query eenmaal te compileren en deze vervolgens meerdere keren uit te voeren met verschillende parameters.
Materialisatie
Materialisatie is het proces van het retourneren van queryresultaten naar de client als CLR-typen. In LINQ naar entiteiten worden gegevensrecords van queryresultaten nooit geretourneerd; er is altijd een ondersteunend CLR-type, gedefinieerd door de gebruiker of door het Entity Framework, of gegenereerd door de compiler (anonieme types). Alle object materialisatie wordt uitgevoerd door het Entity Framework. Fouten die het gevolg zijn van een onvermogen om toe te wijzen tussen het Entity Framework en de CLR, leiden ertoe dat er uitzonderingen worden gegenereerd tijdens het materialiseren van objecten.
Queryresultaten worden meestal als een van de volgende geretourneerd:
Een verzameling van nul of meer getypte entiteitsobjecten of een projectie van complexe typen die in het conceptuele model zijn gedefinieerd.
CLR-typen die worden ondersteund door Entity Framework.
Inlineverzamelingen.
Anonieme typen.
Zie Queryresultaten voor meer informatie.
In deze sectie
Query's in LINQ naar Entiteiten
Expressies in LINQ-naar-entiteiten-query's
Functies in LINQ aanroepen naar entiteitenquery's
Gecompileerde query's (LINQ naar entiteiten)
Standaard query-operators in LINQ to Entities queries
CLR-methode voor canonieke functietoewijzing
Ondersteunde en niet-ondersteunde LINQ-methoden (LINQ naar entiteiten)
Bekende problemen en overwegingen in LINQ naar entiteiten