Рейтинговые книги
Читем онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 261 262 263 264 265 266 267 268 269 ... 642

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;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

  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 поддерживает набор расширяющих методов, которые позволяют применять два (или более) запроса LINQ в качестве основы для нахождения объединений, разностей, конкатенаций и пересечений данных. Первым мы рассмотрим расширяющий метод Except(). Он возвращает результирующий набор LINQ, содержащий разность между двумя контейнерами, которой в этом случае является значение 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)

1 ... 261 262 263 264 265 266 267 268 269 ... 642
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Похожие на Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю книги

Оставить комментарий