Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 261
- Предыдущая
- 261/642
- Следующая
Применение запросов LINQ к объектам коллекций
Помимо извлечения результатов из простого массива данных выражения запросов LINQ могут также манипулировать данными внутри классов из пространства имен
System.Collections.GenericList<T>ListOverCollectionsCarnamespace LinqOverCollections{ class Car { public string PetName {get; set;} = ""; public string Color {get; set;} = ""; public int Speed {get; set;} public string Make {get; set;} = ""; }}Теперь определите внутри операторов верхнего уровня локальную переменную типа
List<T>CarCarusing System;using System.Collections;using System.Collections.Generic;using System.Linq;using LinqOverCollections;Console.WriteLine("***** LINQ over Generic Collections *****\n");// Создать список List<> объектов Car.List<Car> myCars = new List<Car>() { new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"}, new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"}, new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"}, new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"}};Console.ReadLine();Доступ к содержащимся в контейнере подобъектам
Применение запроса LINQ к обобщенному контейнеру ничем не отличается от такого же действия в отношении простого массива, потому что LINQ to Objects может использоваться с любым типом, реализующим интерфейс
IEnumerable<T>myCarsCar55После получения подмножества на консоль будет выведено имя каждого объекта
CarPetNameList<Car>static void GetFastCars(List<Car> myCars){ // Найти в List<> все объекты Car, у которых значение Speed больше 55. var fastCars = from c in myCars where c.Speed > 55 select c; foreach (var car in fastCars) { Console.WriteLine("{0} is going too fast!", car.PetName); }}Обратите внимание, что выражение запроса захватывает из
List<T>Speed55НenryDaisyЧтобы построить более сложный запрос, можно искать только автомобили марки BMW со значением
Speed90&&static void GetFastBMWs(List<Car> myCars) { // Найти быстрые автомобили BMW! var fastCars = from c in myCars where c.Speed > 90 && c.Make == "BMW" select c; foreach (var car in fastCars) { Console.WriteLine("{0} is going too fast!", car.PetName); }}Теперь выводится только одно имя
HenryПрименение запросов LINQ к необобщенным коллекциям
Вспомните, что операции запросов LINQ спроектированы для работы с любым типом, реализующим интерфейс
IEnumerable<T>System.ArraySystem.CollectionsEnumerable.OfТуре<Т>()- Предыдущая
- 261/642
- Следующая
