Share via


Een gegevensbron inschakelen voor LINQ-query's (Visual Basic)

Er zijn verschillende manieren om LINQ uit te breiden zodat elke gegevensbron kan worden opgevraagd in het LINQ-patroon. De gegevensbron kan een gegevensstructuur, een webservice, een bestandssysteem of een database zijn om een naam te geven. Met het LINQ-patroon kunnen clients eenvoudig een query uitvoeren op een gegevensbron waarvoor LINQ-query's zijn ingeschakeld, omdat de syntaxis en het patroon van de query niet worden gewijzigd. De manieren waarop LINQ kan worden uitgebreid naar deze gegevensbronnen zijn onder andere:

  • IEnumerable<T> De interface in een type implementeren om LINQ in te schakelen voor objecten die query's uitvoeren op dat type.

  • Het maken van standaardqueryoperatormethoden, zoals Where en Select waarmee een type wordt uitgebreid, om aangepaste LINQ-query's van dat type in te schakelen.

  • Een provider maken voor uw gegevensbron waarmee de IQueryable<T> interface wordt geïmplementeerd. Een provider die deze interface implementeert, ontvangt LINQ-query's in de vorm van expressiestructuren, die op een aangepaste manier kunnen worden uitgevoerd, bijvoorbeeld op afstand.

  • Het maken van een provider voor uw gegevensbron die gebruikmaakt van een bestaande LINQ-technologie. Een dergelijke provider zou niet alleen query's inschakelen, maar ook bewerkingen voor het invoegen, bijwerken en verwijderen van bewerkingen en toewijzingen voor door de gebruiker gedefinieerde typen.

In dit onderwerp worden deze opties besproken.

LINQ-query's inschakelen voor uw gegevensbron

Gegevens in het geheugen

Er zijn twee manieren waarop u LINQ-query's kunt inschakelen voor in-memory gegevens. Als de gegevens van een type zijn dat wordt geïmplementeerd IEnumerable<T>, kunt u een query uitvoeren op de gegevens met behulp van LINQ naar objecten. Als het niet zinvol is om opsomming van uw type in te schakelen door de IEnumerable<T> interface te implementeren, kunt u methoden voor de standaardqueryoperator LINQ in dat type definiëren of LINQ-standaardqueryoperatormethoden maken waarmee het type wordt uitgebreid. Aangepaste implementaties van de standaardqueryoperators moeten de uitgestelde uitvoering gebruiken om de resultaten te retourneren.

Externe gegevens

De beste optie voor het inschakelen van LINQ-query's van een externe gegevensbron is het implementeren van de IQueryable<T> interface. Dit verschilt echter van het uitbreiden van een provider zoals LINQ naar SQL voor een gegevensbron. Er zijn geen providermodellen voor het uitbreiden van bestaande LINQ-technologieën, zoals LINQ naar SQL, naar andere typen gegevensbronnen beschikbaar in Visual Studio 2008.

IQueryable LINQ-providers

LINQ-providers die implementeren IQueryable<T> , kunnen sterk verschillen in hun complexiteit. In deze sectie worden de verschillende complexiteitsniveaus besproken.

Een minder complexe IQueryable provider kan een interface hebben met één methode van een webservice. Dit type provider is zeer specifiek omdat er specifieke informatie wordt verwacht in de query's die worden verwerkt. Het heeft een gesloten typesysteem, mogelijk met één resultaattype. De meeste uitvoering van de query vindt lokaal plaats, bijvoorbeeld met behulp van de Enumerable implementaties van de standaardqueryoperators. Een minder complexe provider kan slechts één methode-aanroepexpressie onderzoeken in de expressiestructuur die de query vertegenwoordigt en de resterende logica van de query ergens anders laten verwerken.

Een IQueryable provider van gemiddelde complexiteit kan zich richten op een gegevensbron met een gedeeltelijk expressieve querytaal. Als deze is gericht op een webservice, kan het interfacen met meer dan één methode van de webservice en de methode selecteren die moet worden aangeroepen op basis van de vraag die de query stelt. Een provider van gemiddelde complexiteit zou een uitgebreider typesysteem hebben dan een eenvoudige provider, maar het zou nog steeds een vast type systeem zijn. De provider kan bijvoorbeeld typen weergeven met een-op-veel-relaties die kunnen worden doorkruist, maar biedt geen toewijzingstechnologie voor door de gebruiker gedefinieerde typen.

Een complexe IQueryable provider, zoals de LINQ naar SQL-provider, kan volledige LINQ-query's vertalen naar een expressieve querytaal, zoals SQL. Een complexe provider is algemener dan een minder complexe provider, omdat deze een grotere verscheidenheid aan vragen in de query kan verwerken. Het heeft ook een open type systeem en moet daarom een uitgebreide infrastructuur bevatten om door de gebruiker gedefinieerde typen toe te wijzen. Voor het ontwikkelen van een complexe provider is een aanzienlijke hoeveelheid inspanning vereist.

Zie ook