This article has been localized into Dutch by the community.
Inleiding
LINQ, de afkorting van Language-Integrated Query, is een technologie binnen het .NET framework waardoor je op een gemakkelijke ,manier data kunt zoeken en manipuleren via uiteenlopende bronnen. Met ander woorden, Je kunt op dezelfde manier werken, of de bron nu eensimpele lijst is, een woordenboek, een XML bestand of een database tabel. LINQ kent twee syntaxis smaken: De Query an de Method syntaxis. In het volgende artikel zullen we beide grondig bespreken, maar om je alvast warm te maken voor LINQ geef ik je een snelle demonstratie van de elegante manier waarop LINQ een query uitvoert bij een eenvoudige data bron:
var names = new List<string>()
{
"John Doe",
"Jane Doe",
"Jenna Doe",
"Joe Doe"
};
// Get the names which are 8 characters or less, using LINQ
var shortNames = from name in names where name.Length <= 8 orderby name.Length select name;
foreach (var name in shortNames)
Console.WriteLine(name);
In slechts één regel, met gebruik van de LINQ query syntax, kan ik naar alle namen in de lijst vragen die 8 letters (of minder) lang zijn, en ze tevens laten sorteren op lengte! En dat is nog maar één regel code, en het toont maar een fractie van wat LINQ kan! In de volgende artikelen ga ik langs alle verbazingwekkende mogelijkheden die je krijgt bij het gebruik van LINQ. Maar eerst hebben we het even over hoe en wanneer een LINQ query wordt uitgevoerd.
Uitgestelde executie (uitvoering).
De meeste programmeurs zijn er aan gewend dat code regel voor regel wordt uitgevoerd. Vandaar dat het als een verrassing komt dat een LINQ query niet wordt uitgevoerd zodra de regel met het query gedeelte aan de beurt is. In plaats daarvan wordt LINQ pas uitgevoerd zodra je data gaat gebruiken, bv. als je iets herhaalt of een method aanroept zoals ToList() of Count(). Dat betekent ook dat je een query kan bouwen die meerder regels omvat, waarop je meerdere operaties loslaat Maar de data worden pas opgehaald als je ze nodig hebt. Ik zal het illustreren met een verlengde versie van ons vorige voorbeeld, waar we switchen naar de method syntax in plaats van de vorige query syntaxis.
var names = new List<string>()
{
"John Doe",
"Jane Doe",
"Jenna Doe",
"Joe Doe"
};
// Get the names which are 8 characters or less, using LINQ
var shortNames = names.Where(name => name.Length <= 8);
// Order it by length
shortNames = shortNames.OrderBy(name => name.Length);
// Add a name to the original list
names.Add("Zoe Doe");
// Iterate over it - the query has not actually been executed yet!
// It will be as soon as we hit the foreach loop though!
foreach (var name in shortNames)
Console.WriteLine(name);
Ik heb wat commentaar toegevoegd aan de code, zodat het makkelijker te volgen is. Zie ook dat ik enig bewijs heb toegevoegd: Na de query voeg ik een naam toe aan de oorspronkelijke lijst. Als nu de query al was uitgevoerd, dan zou dit natuurlijk niets uitmaken voor het resultaat, maar dat doet het wel, omdat het wordt toegevoegd na de query maar VOORDAT we de data echt gaan gebruiken, en dat gebeurt in de foreach loop.
Dit is niet van groot belang bij een query bij een lijst van 4 of 5 namen. Maar stel je voor dat we een lijst hadden met 10 millioen gegevens, of misschien ergens een afgelegen database. In dat geval is het erg belangrijk dat we niet meerdere queries uitvoeren als we maar één query kunnen doen.
Samenvatting
LINQ stelt je in staat om op een simpele manier en bij uiteenlopende databronnen een query uit te voeren, waarbij je dezelfde syntaxis gebruikt, ofwel de query syntaxis ofwel de method syntaxis, die we later in het volgende artikel zullen bespreken.