Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
static void GetNamesAndDescriptionsTyped(
ProductInfo[] products)
{
Console.WriteLine("Names and Descriptions:");
IEnumerable<ProductInfoSmall> nameDesc =
from p
in products
select new ProductInfoSmall
{ Name=p.Name, Description=p.Description };
foreach (ProductInfoSmall item in nameDesc)
{
Console.WriteLine(item.ToString());
}
}
При проецировании LINQ у вас есть выбор, какой метод использовать (в анонимные или в строго типизированные объекты). Решение, которое вы примете, полностью зависит от имеющихся бизнес-требований.
Подсчет количества с использованием класса Enumerable
Во время проецирования новых пакетов данных у вас может возникнуть необходимость выяснить количество элементов, возвращаемых внутри последовательности. Для определения числа элементов, которые возвращаются из выражения запроса LINQ, можно применять расширяющий метод
Count()
Enumerable
string
static void GetCountFromQuery()
{
string[] currentVideoGames = {"Morrowind", "Uncharted 2",
"Fallout 3", "Daxter", "System
Shock 2"};
// Получить количество элементов из запроса.
int numb =
(from g in currentVideoGames where g.Length > 6 select g).Count();
// Вывести количество элементов.
Console.WriteLine("{0} items honor the LINQ query.", numb);
}
Изменение порядка следования элементов в результирующих наборах на противоположный
Изменить порядок следования элементов в результирующем наборе на противоположный довольно легко с помощью расширяющего метода
Reverse<T>()
Enumerable
ProductInfo[]
static void ReverseEverything(ProductInfo[] products)
{
Console.WriteLine("Product in reverse:");
var allProducts = from p in products select p;
foreach (var prod in allProducts.Reverse())
{
Console.WriteLine(prod.ToString());
}
}
Выражения сортировки
В начальных примерах настоящей главы вы видели, что в выражении запроса может использоваться операция
orderby
descending
static void AlphabetizeProductNames(ProductInfo[] products)
{
// Получить названия товаров в алфавитном порядке.
var subset = from p in products orderby p.Name select p;
Console.WriteLine("Ordered by Name:");
foreach (var p in subset)
{
Console.WriteLine(p.ToString());
}
}
Хотя порядок по возрастанию является стандартным, свои намерения можно прояснить, явно указав операцию
ascending
var subset = from p in products orderby p.Name ascending select p;
Для получения элементов в порядке убывания служит операция
descending
var subset = from p in products orderby p.Name descending select p;
LINQ как лучшее средство построения диаграмм Венна
Класс
Enumerable
Except()
Yugo
static void DisplayDiff()
{
List<string> myCars =
new List<String> {"Yugo", "Aztec", "BMW"};
List<string> yourCars =
new List<String>{"BMW", "Saab", "Aztec" };
var carDiff =
(from c in myCars select c)