Partager via


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 :

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);
}

Voir aussi