English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Opérateurs de conversion LINQ

Les opérateurs de conversion en LINQ peuvent être utilisés pour convertir le type des éléments d'une séquence (ensemble). Les opérateurs de conversion se divisent en trois catégories :AsOpérateurs (AsEnumerable et AsQueryable),ToOpérateurs (ToArray, ToDictionary, ToList et ToLookup) etConversionOpérateurs (Cast et OfType).

Le tableau suivant liste tous les opérateurs de conversion.

MéthodeDescription
AsEnumerable

Retourner la séquence d'entrée en IEnumerable < T>

AsQueryable

Convertir IEnumerable en IQueryable pour simuler un fournisseur de requêtes distantes

Cast

Convertir un ensemble non générique en ensemble générique (IEnumerable à IEnumerable)

OfTypeFiltrer l'ensemble en fonction du type spécifié
ToArrayConvertir un ensemble en tableau
ToDictionary

Placer les éléments dans un Dictionary en fonction de la fonction sélecteur de clé

ToList

Convertir un ensemble en List

ToLookupGrouper les éléments dans Lookup<TKey, TElement>

Les méthodes AsEnumerable et AsQueryable

Les méthodes AsEnumerable et AsQueryable convertissent respectivement l'objet source en IEnumerable <T> ou en IQueryable <T>.

Voyons les exemples suivants :

class Program
{
    static void ReportTypeProperties<T>(T obj)
    {
        Console.WriteLine("Compile-time type: {0}", typeof(T).Name);
        Console.WriteLine("Type réel : {0}", obj.GetType().Name)}
    }
    static void Main(string[] args)
    {
        Student[] studentArray = { 
                new Student() { StudentID = 1, StudentName = "John", Age = 18 }
                new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }
                new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }
                new Student() { StudentID = 4, StudentName = "Ram", Age = 20 },
                new Student() { StudentID = 5, StudentName = "Ron", Age = 31 }
            }   
            
        ReportTypeProperties(studentArray);
        ReportTypeProperties(studentArray.AsEnumerable());
        ReportTypeProperties(studentArray.AsQueryable());   
    }
}
Sortie :
Compile-Type de temps : Student[]
Type réel : Student[]
Compile-Type de temps : IEnumerable`1
Type réel : Student[]
Compile-time type: IQueryable`1
Actual type: EnumerableQuery`1

Comme illustré dans l'exemple ci-dessus, les méthodes AsEnumerable et AsQueryable convertissent respectivement le type de temps de compilation en IEnumerable et en IQueryable

Cast

L'effet de Cast est identique à celui de AsEnumerable<T>. Il force l'objet source à être converti en IEnumerable<T>.

class Program
{
    static void ReportTypeProperties<T>(T obj)
    {
        Console.WriteLine("Compile-time type: {0}", typeof(T).Name);
        Console.WriteLine("Type réel : {0}", obj.GetType().Name)}
    }
    static void Main(string[] args)
    {
        Student[] studentArray = { 
                new Student() { StudentID = 1, StudentName = "John", Age = 18 }
                new Student() { StudentID = 2, StudentName = "Steve", Age = 21 }
                new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }
                new Student() { StudentID = 4, StudentName = "Ram", Age = 20 },
                new Student() { StudentID = 5, StudentName = "Ron", Age = 31 }
            }   
         
        ReportTypeProperties(studentArray);
        ReportTypeProperties(studentArray.Cast<Student>());
    }
}
Sortie :
Compile-Type de temps : Student[]
Type réel : Student[]
Compile-Type de temps : IEnumerable`1
Type réel : Student[]
Compile-Type de temps : IEnumerable`1
Type réel : Student[]
Compile-Type de temps : IEnumerable`1
Type réel : Student[]

studentArray.Cast<Student>() est identique à (IEnumerable<Student>)studentArray, mais Cast<Student>() est plus lisible.

Opérateur To : ToArray(), ToList(), ToDictionary()

Comme son nom l'indique, les méthodes ToArray(), ToList(), ToDictionary() convertissent respectivement l'objet source en tableau, liste ou dictionnaire.

L'opérateur To force l'exécution de la requête. Il force le fournisseur de requête distant à exécuter la requête et à obtenir les résultats à partir de la source de données sous-jacente (comme une base de données SQL Server).

IList<string> strList = new List<string>() { 
                                            "Un", 
                                            "Deux", 
                                            "Trois", 
                                            "Quatre", 
                                            "Trois" 
                                            }
string[] strArray = strList.ToArray<string>();// Convertir une liste en tableau
IList<string> list = strArray.ToList<string>(); // convertit un tableau en liste

ToDictionary - Convertir une liste générique en dictionnaire générique :

IList<Student> studentList = new List<Student>() { 
                    new Student() { StudentID = 1, StudentName = "John", age = 18 }
                    new Student() { StudentID = 2, StudentName = "Steve", age = 21 }
                    new Student() { StudentID = 3, StudentName = "Bill", age = 18 }
                    new Student() { StudentID = 4, StudentName = "Ram", age = 20 },
                    new Student() { StudentID = 5, StudentName = "Ron", age = 21 } 
                }
//Voici la conversion de la liste en dictionnaire, où StudentId est la clé
IDictionary<int, Student> studentDict = 
                                studentList.ToDictionary<Student, int>(s => s.StudentID); 
foreach(var key in studentDict.Keys)
	Console.WriteLine("Clé: {0}, Valeur: {1} 
                                key, (studentDict[key] as Student).StudentName);
Sortie :
Clé: 1, Valeur: John
Clé: 2, Valeur: Steve
Clé: 3, Valeur: Bill
Clé: 4, Valeur: Ram
Clé: 5, Valeur: Ron

La figure suivante montre comment studentDict contient une clé de l'exemple précédent.-value pair, où key est StudentID et value est l'objet Student.

LINQ-Opérateur ToDictionary