English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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éthode | Description |
---|---|
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) |
OfType | Filtrer l'ensemble en fonction du type spécifié |
ToArray | Convertir 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 |
ToLookup | Grouper les éléments dans Lookup<TKey, TElement> |
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()); } }
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
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>()); } }
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.
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);
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.