Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Conversiemethoden wijzigen het type invoerobjecten.
Belangrijk
In deze voorbeelden wordt een System.Collections.Generic.IEnumerable<T> gegevensbron gebruikt. Gegevensbronnen die gebaseerd zijn op System.Linq.IQueryProvider maken gebruik van System.Linq.IQueryable<T> gegevensbronnen en expressiebomen. Expressiestructuren hebben beperkingen voor de toegestane C#-syntaxis. Bovendien kan elke IQueryProvider gegevensbron, zoals EF Core , meer beperkingen opleggen. Raadpleeg de documentatie voor uw gegevensbron.
Conversiebewerkingen in LINQ-query's zijn handig in verschillende toepassingen. Hier volgen enkele voorbeelden:
- De Enumerable.AsEnumerable methode kan worden gebruikt om de aangepaste implementatie van een type van een standaardqueryoperator te verbergen.
- De Enumerable.OfType methode kan worden gebruikt om niet-geparameteriseerde verzamelingen in te schakelen voor LINQ-query's.
- De Enumerable.ToArraymethoden , Enumerable.ToDictionaryen Enumerable.ToListEnumerable.ToLookup methoden kunnen worden gebruikt om onmiddellijke uitvoering van query's af te dwingen in plaats van deze uit te stellen totdat de query is geïnventariseerd.
Methoden
De volgende tabel bevat de standaardqueryoperatormethoden waarmee conversies van gegevenstypen worden uitgevoerd.
De conversiemethoden in deze tabel waarvan de namen beginnen met As wijzigen het statische type van de bronverzameling, maar niet opsommen. De methoden waarvan de namen beginnen met 'Aan' inventariseren de bronverzameling en plaatsen de items in het bijbehorende verzamelingstype.
| Methodenaam | Beschrijving | Syntaxis van C#-query-expressie | Meer informatie |
|---|---|---|---|
| AsEnumerable | Retourneert de invoer die is getypt als IEnumerable<T>. | Niet van toepassing. | Enumerable.AsEnumerable |
| AsQueryable | Converteert een (algemeen) IEnumerable naar een (algemeen) IQueryable. | Niet van toepassing. | Queryable.AsQueryable |
| Rolverdeling | Hiermee worden de elementen van een verzameling geconverteerd naar een opgegeven type. | Gebruik een expliciet getypte bereikvariabele. Voorbeeld:from string str in words |
Enumerable.Cast Queryable.Cast |
| OfType | Filtert waarden, afhankelijk van de mogelijkheid om te worden omgezet naar een opgegeven type. | Niet van toepassing. | Enumerable.OfType Queryable.OfType |
| ToArray | Converteert een verzameling naar een array. Deze methode dwingt de uitvoering van query's af. | Niet van toepassing. | Enumerable.ToArray |
| ToDictionary | Hiermee worden elementen geplaatst in een Dictionary<TKey,TValue> op basis van een functie voor sleutelkeuze. Deze methode zorgt ervoor dat query's worden uitgevoerd. | Niet van toepassing. | Enumerable.ToDictionary |
| ToList | Converteert een verzameling naar een List<T>. Deze methode dwingt de uitvoering van query's af. | Niet van toepassing. | Enumerable.ToList |
| ToLookup | Hiermee plaatst u elementen in een Lookup<TKey,TElement> (een-op-veel-woordenboek) op basis van een sleutelselectiefunctie. Deze methode dwingt de uitvoering van query's af. | Niet van toepassing. | Enumerable.ToLookup |
Notitie
In de volgende voorbeelden in dit artikel worden de algemene gegevensbronnen voor dit gebied gebruikt.
Elk Student heeft een cijferniveau, een primaire afdeling en een reeks scores. Een Teacher heeft ook een City eigenschap die de campus identificeert waar de docent klassen heeft. A Department heeft een naam en een verwijzing naar een Teacher persoon die als afdelingshoofd fungeert.
U vindt de voorbeeldgegevensset in de bronopslagplaats.
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; }
}
Notitie
Raadpleeg de veelvoorkomende gegevensbronnen voor dit gebied in het artikel Overzicht van Standaardqueryoperators.
Voorbeeld van syntaxis van queryexpressie
In het volgende codevoorbeeld wordt een expliciet getypte bereikvariabele gebruikt om een type naar een subtype te casten voordat u toegang krijgt tot een lid dat alleen beschikbaar is voor het subtype.
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);
}
De equivalente query kan worden uitgedrukt met behulp van methodesyntaxis, zoals wordt weergegeven in het volgende voorbeeld:
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}