English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Основы LINQОператоры преобразования в LINQ можно использовать для преобразования типа элементов в последовательности (наборе). Операторы преобразования делятся на три типа:AsОператоры (AsEnumerable и AsQueryable),ToОператоры (ToArray, ToDictionary, ToList и ToLookup) иПреобразование
Операторы (Cast и OfType).
В таблице ниже перечислены все операторы преобразования. | Метод |
---|---|
Описание | AsEnumerable |
Конвертируйте входную последовательность в IEnumerable<T> возвращает | AsQueryable |
Cast | Конвертируйте неогенерический набор в генерический набор (IEnumerable к IEnumerable) |
OfType | Фильтруйте набор по заданному типу |
ToArray | Конвертируйте набор в массив |
ToDictionary | Элементы поместите в Dictionary по функции выбора ключа |
ToList | Конвертируйте набор в List |
ToLookup | Элементы группируются в Lookup<TKey, TElement> |
Методы AsEnumerable и AsQueryable преобразуют исходный объект или преобразуют его в IEnumerable <T> или IQueryable <T>.
Смотрите следующий пример:
class Program { static void ReportTypeProperties<T>(T obj) { Console.WriteLine("Compile-time type: {0}", typeof(T).Name); Console.WriteLine("Actual type: {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()); } }
Время компиляции типа: Student[] Реальный тип: Student[] Время компиляции типа: IEnumerable`1 Реальный тип: Student[] Compile-time type: IQueryable`1 Actual type: EnumerableQuery`1
Как показано в примере, методы AsEnumerable и AsQueryable преобразуют тип времени компиляции в IEnumerable и IQueryable
Действие Cast совпадает с AsEnumerable<T>. Он преобразует исходный объект в IEnumerable<T>.
class Program { static void ReportTypeProperties<T>(T obj) { Console.WriteLine("Compile-time type: {0}", typeof(T).Name); Console.WriteLine("Actual type: {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>()); } }
Время компиляции типа: Student[] Реальный тип: Student[] Время компиляции типа: IEnumerable`1 Реальный тип: Student[] Время компиляции типа: IEnumerable`1 Реальный тип: Student[] Время компиляции типа: IEnumerable`1 Реальный тип: Student[]
studentArray.Cast<Student>() и (IEnumerable<Student>)studentArray одинаковы, но Cast<Student>() лучше читается.
Как следует из названия, методы ToArray(), ToList(), ToDictionary() преобразуют исходный объект в массив, список или словарь.
Оператор To forza выполнение de la consulta. Он заставляет удаленного провайдера выполнения запроса выполнить запрос и получить результаты из нижнего уровня данных (например, из базы данных SQL Server).
IList<string> strList = new List<string>() { "One", "Two", "Three", "Four", "Three" }; string[] strArray = strList.ToArray<string>();// Преобразование списка в массив IList<string> list = strArray.ToList<string>(); // Преобразование массива в список
ToDictionary - Преобразование.generic List в.generic Dictionary:
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 } }; //Ниже преобразуется список в словарь, где StudentId является ключом IDictionary<int, Student> studentDict = studentList.ToDictionary<Student, int>(s => s.StudentID); foreach(var key in studentDict.Keys) Console.WriteLine("Key: {0}, Value: {1}", key, (studentDict[key] as Student).StudentName);
Key: 1, Value: John Key: 2, Value: Steve Key: 3, Value: Bill Key: 4, Value: Ram Key: 5, Value: Ron
На следующем рисунке показано, как studentDict из предыдущего примера содержит пароль-значение, где ключ - это StudentID, а значение - это объект Student.