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

Операторы преобразования LINQ

Основы 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

Методы 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

Действие 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>() лучше читается.

Оператор To: ToArray(), ToList(), ToDictionary()

Как следует из названия, методы 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.

Оператор LINQ-ToDictionary