Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Konverteringsmetoder ändrar typ av indataobjekt.
Viktigt!
Dessa exempel använder en System.Collections.Generic.IEnumerable<T> datakälla. Datakällor som baseras på System.Linq.IQueryProvider använder System.Linq.IQueryable<T> och uttrycksträd. Uttrycksträd har begränsningar för den tillåtna C#-syntaxen. Dessutom kan varje IQueryProvider datakälla, till exempel EF Core , införa fler begränsningar. Kontrollera dokumentationen för din datakälla.
Konverteringsåtgärder i LINQ-frågor är användbara i olika program. Följande är några exempel:
- Metoden Enumerable.AsEnumerable kan användas för att dölja en typs anpassade implementering av en standardfrågasoperator.
- Metoden Enumerable.OfType kan användas för att aktivera icke-parametriserade samlingar för LINQ-frågor.
- Metoderna Enumerable.ToArray, Enumerable.ToDictionary, Enumerable.ToList och Enumerable.ToLookup kan användas för att tvinga fram omedelbar körning av sökfrågan i stället för att skjuta upp den tills frågan är genomgången.
Metoder
I följande tabell visas de standardmetoder för frågeoperatorer som utför datatypkonverteringar.
Konverteringsmetoderna i den här tabellen vars namn börjar med "Som" ändrar den statiska typen av källsamling men räknar inte upp den. De metoder vars namn börjar med "Till" räknar upp källsamlingen och placerar objekten i motsvarande samlingstyp.
| Metodnamn | beskrivning | Syntax för C#-frågeuttryck | Mer information |
|---|---|---|---|
| AsEnumerable | Returnerar indata som skrivits som IEnumerable<T>. | Ej tillämpbart. | Enumerable.AsEnumerable |
| AsQueryable | Konverterar en (generisk) IEnumerable till en (generisk) IQueryable. | Ej tillämpbart. | Queryable.AsQueryable |
| Rollista | Omvandlar elementen i en samling till en angiven typ. | Använd en explicit typ av intervallvariabel. Till exempel:from string str in words |
Enumerable.Cast Queryable.Cast |
| OfType | Filtrerar värden, beroende på deras förmåga att omvandlas till en angiven typ. | Ej tillämpbart. | Enumerable.OfType Queryable.OfType |
| ToArray | Konverterar en samling till en matris. Den här metoden tvingar fram frågekörning. | Ej tillämpbart. | Enumerable.ToArray |
| ToDictionary | Placerar element i en Dictionary<TKey,TValue> baserad på en nyckelväljare. Den här metoden tvingar fram frågekörning. | Ej tillämpbart. | Enumerable.ToDictionary |
| ToList | Konverterar en samling till en List<T>. Den här metoden tvingar fram frågekörning. | Ej tillämpbart. | Enumerable.ToList |
| ToLookup | Placerar element i en Lookup<TKey,TElement> (en en-till-många-ordlista) baserat på en nyckelväljare. Den här metoden tvingar fram frågekörning. | Ej tillämpbart. | Enumerable.ToLookup |
Kommentar
I följande exempel i den här artikeln används vanliga datakällor för det här området.
Varje Student har en betygsnivå, en primär avdelning och en serie poäng. En Teacher har också en City egenskap som identifierar det campus där läraren har klasser. A Department har ett namn och en referens till en Teacher som fungerar som avdelningschef.
Du hittar exempeldatauppsättningen i källdatabasen.
public enum GradeLevel
{
FirstYear = 1,
SecondYear,
ThirdYear,
FourthYear
};
public class Student
{
public required string FirstName { get; init; }
public required string LastName { get; init; }
public required int ID { get; init; }
public required GradeLevel Year { get; init; }
public required List<int> Scores { get; init; }
public required int DepartmentID { get; init; }
}
public class Teacher
{
public required string First { get; init; }
public required string Last { get; init; }
public required int ID { get; init; }
public required string City { get; init; }
}
public class Department
{
public required string Name { get; init; }
public int ID { get; init; }
public required int TeacherID { get; init; }
}
Kommentar
Du kan läsa vanliga datakällor för det här området i artikeln Översikt över vanliga frågeoperatorer .
Exempel på frågeuttryckssyntax
I följande kodexempel används en explicit typvariabel för att omvandla en typ till en undertyp innan du får åtkomst till en medlem som endast är tillgänglig för undertypen.
IEnumerable people = students;
var query = from Student student in people
where student.Year == GradeLevel.ThirdYear
select student;
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
Motsvarande fråga kan uttryckas med hjälp av metodsyntax enligt följande exempel:
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}