Language Integrated Query (LINQ)
Language-Integrated Query (LINQ) is de naam voor een set technologieën op basis van de integratie van querymogelijkheden rechtstreeks in de C#-taal. Query's op gegevens worden traditioneel uitgedrukt als eenvoudige tekenreeksen zonder typecontrole tijdens het compileren of intelliSense-ondersteuning. Bovendien moet u een andere querytaal leren voor elk type gegevensbron: SQL databases, XML-documenten, verschillende webservices, enzovoort. Met LINQ is een query een eersteklas taalconstructie, net als klassen, methoden, gebeurtenissen.
Voor een ontwikkelaar die query's schrijft, is het meest zichtbare onderdeel 'language-integrated' van LINQ de query-expressie. Query-expressies worden geschreven in een declaratieve querysyntaxis. Met behulp van querysyntaxis kunt u filteren, ordenen en groeperen bewerkingen uitvoeren op gegevensbronnen met een minimum aan code. U gebruikt dezelfde basispatronen voor query-expressies om gegevens in SQL databases, ADO .NET-gegevenssets, XML-documenten en -streams en .NET-verzamelingen op te vragen en te transformeren.
In het volgende voorbeeld ziet u de volledige querybewerking. De volledige bewerking omvat het maken van een gegevensbron, het definiëren van de query-expressie en het uitvoeren van de query in een foreach
instructie.
// Specify the data source.
int[] scores = { 97, 92, 81, 60 };
// Define the query expression.
IEnumerable<int> scoreQuery =
from score in scores
where score > 80
select score;
// Execute the query.
foreach (int i in scoreQuery)
{
Console.Write(i + " ");
}
// Output: 97 92 81
Overzicht van query-expressies
Query-expressies kunnen worden gebruikt om gegevens op te vragen en te transformeren vanuit een gegevensbron met LINQ-functionaliteit. Een enkele query kan bijvoorbeeld gegevens ophalen uit een SQL-database en een XML-stroom als uitvoer produceren.
Query-expressies zijn gemakkelijk te begrijpen omdat ze veel bekende C#-taalconstructies gebruiken.
De variabelen in een query-expressie zijn allemaal sterk getypt, hoewel u in veel gevallen het type niet expliciet hoeft op te geven omdat de compiler dit kan afleiden. Zie Relaties typen in LINQ-querybewerkingen voor meer informatie.
Een query wordt pas uitgevoerd nadat u de queryvariabele hebt herhaald, bijvoorbeeld in een
foreach
instructie. Zie Inleiding tot LINQ-query's voor meer informatie.Tijdens het compileren worden query-expressies geconverteerd naar de methode Standard Query Operator-aanroepen volgens de regels die zijn vastgelegd in de C#-specificatie. Elke query die kan worden uitgedrukt met behulp van querysyntaxis, kan ook worden uitgedrukt met behulp van de syntaxis van de methode. In de meeste gevallen is de querysyntaxis echter beter leesbaar en beknopt. Zie het overzicht van C#-taalspecificatie en standard-queryoperators voor meer informatie.
Als regel wanneer u LINQ-query's schrijft, raden we u aan om waar mogelijk querysyntaxis en methodesyntaxis te gebruiken wanneer dat nodig is. Er is geen semantisch of prestatieverschil tussen de twee verschillende formulieren. Query-expressies zijn vaak beter leesbaar dan equivalente expressies die zijn geschreven in de syntaxis van de methode.
Sommige querybewerkingen, zoals Count of Max, hebben geen equivalente queryexpressiecomponent en moeten daarom worden uitgedrukt als een methode-aanroep. De syntaxis van de methode kan op verschillende manieren worden gecombineerd met querysyntaxis. Zie Querysyntaxis en methodesyntaxis in LINQ voor meer informatie.
Query-expressies kunnen worden gecompileerd naar expressiestructuren of gedelegeerden, afhankelijk van het type waarop de query wordt toegepast. IEnumerable<T> query's worden gecompileerd naar gemachtigden. IQueryable en IQueryable<T> query's worden gecompileerd naar expressiestructuren. Zie Expressiestructuren voor meer informatie.
Volgende stappen
Lees de documentatie voor de LINQ-technologie waarin u geïnteresseerd bent voor meer informatie over LINQ om vertrouwd te raken met enkele basisconcepten in query-expressies:
XML-documenten: LINQ to XML
ADO.NET Entity Framework: LINQ naar entiteiten
.NET-verzamelingen, bestanden, tekenreeksen enzovoort: LINQ naar objecten
Zie LINQ in C# om meer inzicht te krijgen in LINQ in het algemeen.
Zie de zelfstudie Werken met LINQ in C# als u met LINQ wilt werken.