LINQ: het Zwitsers zakmes om query’s in je code te integreren

Language INtegrated Querying, afgekort LINQ, geeft de mogelijkheid aan ontwikkelaars om een grote verscheidenheid aan gegevensbronnen te bevragen met behulp van een reeks syntactische elementen die afgeleid zijn van C# of VB.NET.

Het grote voordeel hiervan is dat je als developer geen gebruik hoeft te maken van een meer gespecialiseerde en aparte querytaal zoals SQL wanneer je gegevensbronnen binnen C# of VB.NET bevraagt. LINQ maakt dus de toegang tot gegevens voor ontwikkelaars eenvoudiger. In dit artikel staan we stil bij de mogelijkheden van LINQ.

Verzamelnaam om query’s in C# in te voegen

Language-Integrated Query (LINQ) is de verzamelnaam voor een reeks technologieën die query-mogelijkheden rechtstreeks in de C# taal invoegen. Traditioneel voert een ontwikkelaar query’s uit met een eigen gespecialiseerde taal of met data die in een bepaald formaat opgesteld zijn.

Daarom is het nodig om voor elk type gegevensbron een andere query taal te leren. Denk bijvoorbeeld maar aan SQL-databases, XML documenten, verschillende web services, enzovoort.

Met LINQ zijn query’s evenwel een constructie op zich, net zoals klassen, methoden en events. Je schrijft query’s die je toepast op verzamelingen van objecten door gebruik te maken van sleutelwoorden en operatoren. De LINQ-familie van technologieën biedt consistente query-mogelijkheden voor objecten (LINQ to Objects), relationele databases (LINQ to SQL), en XML (LINQ to XML).

Diverse mogelijkheden om query-expressions makkelijker en performanter te maken

Voor een ontwikkelaar die query’s schrijft, is het meest zichtbare “taal geïntegreerde” deel van LINQ de query-expressie. Query-expressions schrijf je als developer in een declaratieve query syntax. Door gebruik te maken van deze query syntax, kun je filterings-, ordenings- en groeperingsoperaties uitvoeren op gegevensbronnen met een minimum aan code. Je gebruikt dezelfde basispatronen voor query-expressies om gegevens in SQL-databases, ADO.NET-datasets, XML-documenten en -streams, en .NET-verzamelingen te doorzoeken en te transformeren.

Query’s voor C#, query’s voor SQL-server databases, query’s voor XML-documenten: alles kan

Je merkt het, LINQ is een veelzijdige en flexibele query-methode. Net zoals je een Zwitsers zakmes gebruikt voor diverse taken, kun je LINQ query’s schrijven voor diverse toepassingen: query’s in C# voor SQL Server databases, query’s voor XML documenten, query’s voor ADO.NET Datasets, en daarenboven ook voor elke verzameling van objecten die de IEnumerable of de generieke IEnumerable-T interface ondersteunt. Er is ook LINQ-ondersteuning voor web services en andere database-implementaties.

Wat is een query en hoe maak je er het beste gebruik van?

Nu we deze features van LINQ overlopen hebben, willen we nog even stilstaan bij wat een query precies is. Een query is een Engelse term voor “vraag” en is in computerjargon een uitdrukking waarmee gegevens uit een gegevensbron worden opgehaald. Query’s worden gewoonlijk uitgedrukt in een gespecialiseerde querytaal. In de loop van de tijd zijn verschillende talen ontwikkeld voor de verschillende soorten gegevensbronnen, bijvoorbeeld SQL voor relationele databases en XQuery voor XML.

Daarom moesten ontwikkelaars een nieuwe query taal leren voor elk type gegevensbron of gegevensformaat dat zij moesten ondersteunen. LINQ vereenvoudigt deze situatie door een consistent model te bieden voor het werken met gegevens over verschillende soorten gegevensbronnen en -formaten.

In een LINQ query werk je altijd met zogenaamde objecten. Je gebruikt dezelfde basis coderingspatronen om data in XML documenten, SQL databases, ADO.NET Datasets, .NET collections, en elk ander formaat waarvoor een LINQ provider beschikbaar is, te bevragen en te transformeren.

De stappen om een goede query te maken zijn altijd dezelfde

Voor jou als developer bestaat het maken van een query altijd uit drie stappen:

* Het analyseren en onderzoeken van de gegevensbron.
* Het eigenlijke opstellen of ontwikkelen van de query
* Het uitvoeren van de query

Maar hoewel LINQ veelzijdig is en veel voordelen heeft, moet je wel degelijk rekening houden met een bepaalde leercurve. Hier geven we wat tips van ontwikkelaars die je kunnen helpen om op de beste manier aan de slag te gaan met LINQ.

Tips en tricks om op de beste manier met LINQ aan de slag te gaan

Het is bijvoorbeeld een goed idee om eerst de basics van SQL te leren voordat je jezelf op LINQ stort. Door SQL te leren, krijg je meteen ook fundamentele concepten van relationele database management systemen onder de knie.

Als je niet vertrouwd bent met die basisconcepten, is de kans groot dat je LINQ niet op de meest optimale en snelle manier gaat gebruiken. Bovendien is SQL is een zeer eenvoudige taal om te leren.

Online vind je diverse tutorials en ook zijn er goede boeken. Bij TAILOR IT geven we trainingen op maat in SQL, of maken we je wegwijs in de principes van relationele databases. Hiervoor hebben we diverse formules of mogelijkheden.

LINQ heeft veel performance voordelen voor je code in petto

Verder heeft LINQ ook heel wat voordelen qua performance. Als developer ben je vaak geneigd je sterk te focussen op performance en hiervoor je code specifiek aan te passen. Heel vaak zijn de LINQ-mogelijkheden op het vlak van filteren, zoeken, wijzigen en looping gemakkelijk en eenvoudig te integreren in je code. Deze code is verder ook gemakkelijk te onderhouden. Omdat je LINQ integreert in bestaande Microsoft-programmeertalen, kun je de code gemakkelijk omzetten multi-threading systemen, wat de prestaties nog eens zonder veel moeite drastisch verbetert.

Abstractie is de kunst van elke programmeertaal, dus ook bij LINQ

Zoals bij elke programmeertaal, komt het bij LINQ neer op het abstraheren van data. Alles is een abstractie. C is een abstractie, Python is een abstractie, Assembly is een abstractie, zelfs het schrijven in binaire microcode is nog steeds een abstractie. LINQ is gewoon een abstractie bovenop C#.

Ofwel gebruik je een abstractie van een lager niveau en schrijf je alle functionaliteit zelf, ofwel gebruik je een goed ontworpen en geteste variant die alles implementeert wat je wil doen. Een vuistregel is dat je niet zomaar het wiel moet gaan uitvinden omdat je hier de mogelijkheden toe hebt, of omdat je denkt dat je het beter kunt. Dit is een recept voor code, die te lang duurt, te veel bugs heeft en niet echt de performance en het onderhoud krijgt die nodig zijn.

Hoe te beginnen met LINQ? Vraag TAILOR IT om advies!

Ga je van start met LINQ, begin dan op een eenvoudige manier, en begin al heel snel met testen. Laten je testen je zien dat er een knelpunt is, dan ga je er naar toe en pas je de code aan om ze beter te maken. Als je alles zelf doet in plaats van bijvoorbeeld LINQ te gebruiken, dan word je al snel overspoeld door kleine fouten, waarvan elk klein beetje op lange termijn enorme problemen kan veroorzaken.

Net zoals het gebruik van een bibliotheek of library in plaats van steeds van nul te beginnen, kan LINQ je dus helpen om je programma te laten slagen.

 

De belangrijkste concepten van LINQ

Hier geven we nog een overzicht van de belangrijkste concepten in LINQ.

* Query expressions gebruik je om data van elke databron op te vragen en te transformeren. Bijvoorbeeld kan een query gegevens ophalen uit een SQL database en een XML-stroom produceren als output. Query expressies zijn gemakkelijk te begrijpen omdat ze veel bekende C# taal constructies gebruiken.

* De variabelen in een query expressie zijn allemaal sterk getypeerd, hoewel u in veel gevallen het type niet expliciet hoeft op te geven omdat de compiler het kan afleiden. Dit scheelt op lange termijn heel wat qua werk.

* Een query wordt pas uitgevoerd als je itereert over de query variabele, bijvoorbeeld in een “for each”-statement.

* Zowel een query syntax als een methode syntax zijn mogelijk bij LINQ. Wanneer je LINQ query’s schrijft, raden wij je evenwel aan om query syntax te gebruiken waar mogelijk en methode syntax waar nodig. Er is geen semantisch of performance verschil tussen de twee verschillende vormen. Query expressies zijn vaak leesbaarder dan equivalente expressies geschreven in methode syntaxis.

* Sommige query operaties, zoals “Count” of “Max”, hebben geen equivalente queryexpression clausule en moet je daarom altijd uitdrukken als een methode-call. Methode syntaxis kun je trouwens op verschillende manieren combineren met query syntaxis.

Leer LINQ vandaag dankzij een gespecialiseerde training van TAILOR IT

Wil je je code verrijken met uniforme query’s, die je makkelijk kunt onderhouden en delen met andere developers? En hou je als developer van het werken met goed gestructureerde code, die jezelf en je klanten gelukkig maakt? Dan is het dus een goed idee om LINQ toe te voegen aan je arsenaal van tools. Je kunt altijd een beroep doen op de specialisten van TAILOR IT om de mogelijkheden van LINQ te leren. Zoals onze naam verraadt, zijn wij specialist in het opstellen in diverse trainingen op maat van jou als klant.

Tot binnenkort!

Programmeren in C

De programmeertaal C is klein, snel en enorm krachtig en stelt je in staat om alles uit je hardware te halen. Het wordt met name…

Bekijk training

Programmeren in C#

C# is een, door Microsoft ontwikkelde, moderne universele object-georiënteerde programmeertaal, die in vergelijking met andere programmeertalen makkelijker aan te leren is. Je kunt er moderne…

Bekijk training

Programmeren in C++

C++ is een object georiënteerde programmeertaal, die bij veel moderne applicaties wordt gebruikt. C++ is een uitbreiding op C. Met C++ communiceer je rechtstreeks met…

Bekijk training