Conversion des types de données (C#)
Les méthodes de conversion changent le type d’objets en entrée.
Important
Ces exemples utilisent une source de données System.Collections.Generic.IEnumerable<T>. Les sources de données basées sur System.Linq.IQueryProvider utilisent des sources de données System.Linq.IQueryable<T> et des arborescences d’expressions. Les arborescences d’expressions présentent des limitations sur la syntaxe C# autorisée. De plus, chaque source de données IQueryProvider
, telle que EF Core peut imposer des restrictions supplémentaires. Consultez la documentation de votre source de données.
Les opérations de conversion dans les requêtes LINQ sont pratiques dans différentes applications. En voici quelques exemples :
- La méthode Enumerable.AsEnumerable peut être utilisée pour masquer l’implémentation personnalisée d’un type d’un opérateur de requête standard.
- La méthode Enumerable.OfType peut être utilisée pour activer des collections non paramétrables pour l’interrogation LINQ.
- Les méthodes Enumerable.ToArray, Enumerable.ToDictionary, Enumerable.ToList et Enumerable.ToLookup peuvent être utilisées pour forcer l’exécution immédiate de la requête au lieu de la différer jusqu’à ce que la requête soit énumérée.
Méthodes
Le tableau suivant répertorie les méthodes d’opérateur de requête standard qui effectuent des conversions de types de données.
Les méthodes de conversion de ce tableau dont les noms commencent par « As » changent le type statique de la collection source mais ne l’énumèrent pas. Les méthodes dont les noms commencent par "To" énumèrent la collection source et placent les éléments dans le type de collection correspondant.
Nom de la méthode | Description | Syntaxe d'expression de requête C# | Informations complémentaires |
---|---|---|---|
AsEnumerable | Retourne l’entrée typée comme IEnumerable<T>. | Non applicable. | Enumerable.AsEnumerable |
AsQueryable | Convertit un IEnumerable (générique) en IQueryable (générique). | Non applicable. | Queryable.AsQueryable |
Caster | Effectue un cast des éléments d’une collection en un type spécifié. | Utilisez une variable de portée explicitement typée. Par exemple :from string str in words |
Enumerable.Cast Queryable.Cast |
OfType | Filtre les valeurs en fonction de leur capacité à faire l’objet d’un cast en un type spécifié. | Non applicable. | Enumerable.OfType Queryable.OfType |
ToArray | Convertit une collection en un tableau. Cette méthode force l’exécution de la requête. | Non applicable. | Enumerable.ToArray |
ToDictionary | Place des éléments dans un Dictionary<TKey,TValue> basé sur une fonction de sélecteur de clés. Cette méthode force l’exécution de la requête. | Non applicable. | Enumerable.ToDictionary |
ToList | Convertit une collection en List<T>. Cette méthode force l’exécution de la requête. | Non applicable. | Enumerable.ToList |
ToLookup | Place des éléments dans un Lookup<TKey,TElement> (un dictionnaire de type un-à-plusieurs) basé sur une fonction de sélecteur de clés. Cette méthode force l’exécution de la requête. | Non applicable. | Enumerable.ToLookup |
Remarque
Les exemples suivants de cet article utilisent les sources de données courantes pour cette zone.
Chaque Student
a un niveau scolaire, un département principal et une série de notes. Un Teacher
a également une propriété City
qui identifie le campus où l’enseignant donne des cours. Un Department
a un nom, et une référence à un Teacher
qui est responsable du département.
Vous trouverez l’exemple de jeu de données dans le référentiel source.
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; }
}
Exemple de syntaxe d’expression de requête
L’exemple de code suivant utilise une variable de portée explicitement typée pour effectuer un cast d’un type en un sous-type avant d’accéder à un membre qui est disponible uniquement sur le sous-type.
IEnumerable people = students;
var query = from Student student in students
where student.Year == GradeLevel.ThirdYear
select student;
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}
La requête équivalente peut être exprimée en utilisant la syntaxe de méthode, comme illustré dans le code suivant :
IEnumerable people = students;
var query = people
.Cast<Student>()
.Where(student => student.Year == GradeLevel.ThirdYear);
foreach (Student student in query)
{
Console.WriteLine(student.FirstName);
}