Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

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

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

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 264 265 266 267 268 269 270 271 272 ... 642
Перейти на страницу:

using System.Linq;

static void QueryStringWithOperators()

{

  Console.WriteLine(&quot;***** Using Query Operators *****&quot;);

  string[] currentVideoGames = {&quot;Morrowind&quot;, &quot;Uncharted 2&quot;,

                                &quot;Fallout 3&quot;, &quot;Daxter&quot;, &quot;System Shock 2&quot;};

  var subset = from game in currentVideoGames

    where game.Contains(&quot; &quot;) orderby game select game;

  foreach (string s in subset)

  {

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

    Console.WriteLine(&quot;Item: {0}&quot;, s);

  }

}

Очевидное преимущество использования операций запросов C# при построении выражений запросов заключается в том, что делегаты Funс&lt;&gt; и вызовы методов Enumerable остаются вне поля зрения и внимания, т.к. выполнение необходимой трансляции возлагается на компилятор С#. Бесспорно, создание выражений LINQ с применением различных операций запросов (from, in, where или orderby) является наиболее распространенным и простым подходом.

Построение выражений запросов с использованием типа Enumerable и лямбда-выражений

Имейте в виду, что применяемые здесь операции запросов LINQ представляют собой сокращенные версии вызова расширяющих методов, определенных в типе Enumerable. Рассмотрим показанный ниже метод QueryStringsWithEnumerableAndLambdas(), который обрабатывает локальный массив строк, но на этот раз в нем напрямую используются расширяющие методы Enumerable:

static void QueryStringsWithEnumerableAndLambdas()

{

  Console.WriteLine(&quot;***** Using Enumerable / Lambda Expressions *****&quot;);

  string[] currentVideoGames = {&quot;Morrowind&quot;, &quot;Uncharted 2&quot;,

                                &quot;Fallout 3&quot;, &quot;Daxter&quot;, &quot;System Shock 2&quot;};

  // Построить выражение запроса с использованием расширяющих методов,

  // предоставленных типу Array через тип Enumerable.

  var subset = currentVideoGames

    .Where(game =&gt; game.Contains(&quot; &quot;))

    .OrderBy(game =&gt; game).Select(game =&gt; game);

  // Вывести результаты.

  foreach (var game in subset)

  {

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

    Console.WriteLine(&quot;Item: {0}&quot;, game);

  }

  Console.WriteLine();

}

Здесь сначала вызывается расширяющий метод Where() на строковом массиве currentVideoGames. Вспомните, что класс Array получает данный метод от класса Enumerable. Метод Enumerable.Where() требует параметра типа делегата System.Func&lt;T1,TResult&gt;. Первый параметр типа упомянутого делегата представляет совместимые с интерфейсом IEnumerable&lt;T&gt; данные для обработки (массив строк в рассматриваемом случае), а второй — результирующие данные метода, которые получаются от единственного оператора, вставленного в лямбда-выражение.

Возвращаемое значение метода Where() в приведенном примере кода скрыто от глаз, но "за кулисами" работа происходит с типом OrderedEnumerable. На объекте указанного типа вызывается обобщенный метод OrderBy(), который также принимает параметр типа делегата Func&lt;&gt;. Теперь производится передача всех элементов по очереди посредством подходящего лямбда-выражения. Результатом вызова OrderBy() является новая упорядоченная последовательность первоначальных данных.

И, наконец, осуществляется вызов метода Select() на последовательности, возвращенной OrderBy(), который в итоге дает финальный набор данных, сохраняемый в неявно типизированной переменной по имени subset.

Конечно, такой "длинный" запрос LINQ несколько сложнее для восприятия, чем предыдущий пример с операциями запросов LINQ. Без сомнения, часть сложности связана с объединением в цепочку вызовов посредством операции точки. Вот тот же самый запрос с выделением каждого шага в отдельный фрагмент (разбивать запрос на части можно разными способами):

static void QueryStringsWithEnumerableAndLambdas2()

{

  Console.WriteLine(&quot;***** Using Enumerable / Lambda Expressions *****&quot;);

  string[] currentVideoGames = {&quot;Morrowind&quot;, &quot;Uncharted 2&quot;,

                               &quot;Fallout 3&quot;, &quot;Daxter&quot;, &quot;System Shock 2&quot;};

  // Разбить на части.

  var gamesWithSpaces =

      currentVideoGames.Where(game =&gt; game.Contains(&quot; &quot;));

  var orderedGames = gamesWithSpaces.OrderBy(game =&gt; game);

  var subset = orderedGames.Select(game =&gt; game);

  foreach (var game in subset)

1 ... 264 265 266 267 268 269 270 271 272 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга