LINQ
LINQ ist die Abkürzung für Language INtegrated Query. Es handelt sich dabei um eine von Microsoft entwickelte Methode um SQL-, XLink- und XQuery-Anfragen direkt in eine Programmiersprache wie etwa C# 3.0, VB.Net 9.0 und Java als Code statt als String einzubinden. LINQ wurde federführend von Turbo-Pascal- und C#-Autor Anders Hejlsberg entwickelt.
Der Vorteil von LINQ besteht darin, dass der Code durch den Compiler auf Fehler geprüft und optimiert werden kann. Die Syntax von LINQ ist dabei an den Befehlen der SQL-Anfragesprache wie „select“, „from“ und „where“ angelehnt. Die Befehle werden jedoch nicht in SQL-Code umgewandelt, sondern sprechen, mit Hilfe der im .NET-Framework 2.0 eingeführten Erweiterungen, direkt .NET-Objekte an, welche die gewünschte Operation ausführen.
Im Wesentlichen ist LINQ dabei auf die Manipulation von Syntaxbäumen ausgelegt. Die Fähigkeit von XLINQ und DLINK auf XML-Datensätze bzw. SQL-Datenbanken zugreifen zu können besteht darin, dass es sich dabei um Erweiterungen handelt, welche die Daten als Ausdrucksbäume abstrahieren, auf welche schließlich LINQ angewendet wird. Mit entsprechenden Erweiterungen ist es sogar möglich auf LDAP-Verzeichnisdienste oder sogar auf RDF mit Hilfe von SPARQL-ähnlichen Anfragen zuzugreifen.
Das LINQ-Framework enthält zudem das Tool SQLMetal, welches die automatische Codegenerierung von Wrapper-Klassen für Microsoft SQL Server-Datenbanken in C# mit DLINQ ermöglicht, was Softwareentwicklern einen zusätzlichen Komfort bei der Applikationsentwicklung bietet.
Beispiel
Als Beispiel soll hier eine SPARQL-Abfrage einer semantischen Datenbank basierend auf Semweb und LINQ to RDF dienen. Der Beispielcode verwendet eine Website, welche eine SPARQL-Anfrage unterstützt und verschiedene Personen speichert, um herauszufinden wer der aktuelle President der USA ist.
public void GetPresident() { string urlToRemoteSparqlEndpoint = @"http://tempuri.org/services/sparql.aspx"; TripleStore ts = new TripleStore(); ts.EndpointUri = urlToRemoteSparqlEndpoint; ts.QueryType = QueryType.RemoteSparqlStore; IRdfQuery<FoafPerson> qry = new RDF(ts).ForType<FoafPerson>(); var q = from p in qry // Wer ist der President? where p.homepage == "http://www.whitehouse.gov/president/" select new {p.name, p.birthday}; // Das erste Resultat ist das richtige, // da es nur einen aktuellen Presidenten gibt. var president = q[0]; // Ausgabe formatieren string strp = new String.Format( "Der President der USA ist {0} und wurde am {1} geboren. ", president.name, president.birthday ) // Ergebnis auf der Konsole ausgeben Console.WriteLine(strp); }
Weblinks
- The LINQ Project (englische Informationsseite von Microsoft)
- Hooked on LINQ Wiki (englisch)