Frågor i LINQ till entiteter
En fråga är ett uttryck som hämtar data från en datakälla. Frågor uttrycks vanligtvis i ett specialiserat frågespråk, till exempel SQL för relationsdatabaser och XQuery för XML. Därför har utvecklare varit tvungna att lära sig ett nytt frågespråk för varje typ av datakälla eller dataformat som de frågar efter. Språkintegrerad fråga (LINQ) erbjuder en enklare consis tältläge l för att arbeta med data över olika typer av datakällor och format. I en LINQ-fråga arbetar du alltid med programmeringsobjekt.
En LINQ-frågeåtgärd består av tre åtgärder: hämta datakällan eller källorna, skapa frågan och kör frågan.
Datakällor som implementerar det IEnumerable<T> allmänna gränssnittet eller det IQueryable<T> generiska gränssnittet kan efterfrågas via LINQ. Instanser av den generiska ObjectQuery<T> klassen, som implementerar det generiska IQueryable<T> gränssnittet, fungerar som datakälla för LINQ till entitetsfrågor. Den ObjectQuery<T> generiska klassen representerar en fråga som returnerar en samling med noll eller fler typerade objekt. Du kan också låta kompilatorn härleda typen av en entitet med hjälp av nyckelordet var
C# (Dim i Visual Basic).
I frågan anger du exakt den information som du vill hämta från datakällan. En fråga kan också ange hur den informationen ska sorteras, grupperas och formas innan den returneras. I LINQ lagras en fråga i en variabel. Om frågan returnerar en sekvens med värden måste själva frågevariabeln vara en frågebar typ. Den här frågevariabeln vidtar ingen åtgärd och returnerar inga data. den lagrar bara frågeinformationen. När du har skapat en fråga måste du köra frågan för att hämta data.
Frågesyntax
LINQ till entitetsfrågor kan bestå av två olika syntaxer: frågeuttryckssyntax och metodbaserad frågesyntax. Frågeuttryckssyntaxen är ny i C# 3.0 och Visual Basic 9.0 och består av en uppsättning satser skrivna i en deklarativ syntax som liknar Transact-SQL eller XQuery. .NET Framework common language runtime (CLR) kan dock inte läsa själva frågeuttryckets syntax. Vid kompilering översätts därför frågeuttryck till något som CLR förstår: metodanrop. Dessa metoder kallas standardfrågaoperatorer. Som utvecklare kan du anropa dem direkt med hjälp av metodsyntax i stället för att använda frågesyntax. Mer information finns i Frågesyntax och metodsyntax i LINQ.
Syntax för frågeuttryck
Frågeuttryck är en deklarativ frågesyntax. Med den här syntaxen kan en utvecklare skriva frågor på ett högnivåspråk som är formaterat ungefär som Transact-SQL. Genom att använda frågeuttryckssyntax kan du utföra även komplexa filtrerings-, beställnings- och grupperingsåtgärder på datakällor med minimal kod. Mer information finns i Grundläggande frågeåtgärder (Visual Basic). Exempel som visar hur du använder frågeuttryckssyntaxen finns i följande avsnitt:
Metodbaserad frågesyntax
Ett annat sätt att skapa LINQ till entitetsfrågor är att använda metodbaserade frågor. Den metodbaserade frågesyntaxen är en sekvens med direkta metodanrop till LINQ-operatormetoder och skickar lambda-uttryck som parametrar. Mer information finns i Lambda-uttryck. Exempel som visar hur du använder metodbaserad syntax finns i följande avsnitt: