books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

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

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

1 < 10

2 < 10

3 < 10

8 < 10

4 < 10

1 < 10

2 < 10

3 < 10

8 < 10

Среда Visual Studio обладает одной полезной особенностью: если вы поместите точку останова перед оценкой запроса LINQ, то получите возможность просматривать содержимое во время сеанса отладки. Просто наведите курсор мыши на переменную результирующего набора LINQ (

subset
на рис. 13.1) и вам будет предложено выполнить запрос, развернув узел Results View (Представление результатов).

Язык программирования C#9 и платформа .NET5 - _087.png

Роль немедленного выполнения

Когда требуется оценить выражение LINQ, выдающее последовательность, за пределами логики

foreach
, можно вызывать любое количество расширяющих методов, определенных в типе
Enumerable
, таких как
ТоArray<Т>()
,
ToDictionary<TSource, ТКеу>()
и
ToList<T>()
. Все методы приводят к выполнению запроса LINQ в момент их вызова для получения снимка данных. Затем полученным снимком данных можно манипулировать независимым образом.

Кроме того, запрос выполняется немедленно в случае поиска только одного элемента. Метод

First()
возвращает первый элемент последовательности (и должен всегда применяться с конструкцией
orderby
). Метод
FirstOrDefault()
возвращает стандартное значение для типа элемента в последовательности, если возвращать нечего, например, когда исходная последовательность пуста или конструкция
where
отбросила все элементы. Метод
Single()
также возвращает первый элемент последовательности (на основе
orderby
или согласно порядку следования элементов, если конструкция
orderby
отсутствует). Подобно аналогично именованному эквиваленту метод
SingleOrDefault()
возвращает стандартное значение для типа элемента в последовательности, если последовательность пуста (или конструкция
where
отбросила все элементы). Отличие между методами
First(OrDefault)
и
Single(OrDefault)
заключается в том, что
Single(OrDefault)
сгенерирует исключение, если из запроса будет возвращено более одного элемента.

static void ImmediateExecution()

{

    Console.WriteLine();

    Console.WriteLine("Immediate Execution");

    int[] numbers = { 10, 20, 30, 40, 1, 2, 3, 8 };

    // Получить первый элемент в порядке последовательности

    int number = (from i in numbers select i).First();

    Console.WriteLine("First is {0}", number);

    // Получить первый элемент в порядке запроса

    number = (from i in numbers orderby i select i).First();

    Console.WriteLine("First is {0}", number);

    // Получить один элемент, который соответствует запросу

    number = (from i in numbers where i > 30 select i).Single();

    Console.WriteLine("Single is {0}", number);

    try

    {

        // В случае возвращения более одного элемента генерируется исключение

        number = (from i in numbers where i > 10 select i).Single();

    }

    catch (Exception ex)

    {

        Console.WriteLine("An exception occurred: {0}", ex.Message);

    }

<b>  // Получить данные НЕМЕДЛЕННО как int[].</b>

  int[] subsetAsIntArray =

    (from i in numbers where i &lt; 10 select i).ToArray&lt;int&gt;();

<b>  // Получить данные НЕМЕДЛЕННО как List&lt;int&gt;.</b>

  List&lt;int&gt; subsetAsListOfInts =

    (from i in numbers where i &lt; 10 select i).ToList&lt;int&gt;();

}

Обратите внимание, что для вызова методов

Enumerable
выражение LINQ целиком помещено в круглые скобки с целью приведения к корректному внутреннему типу (каким бы он ни был).

Вспомните из главы 10, что если компилятор C# в состоянии однозначно определить параметр типа обобщенного элемента, то вы не обязаны указывать этот параметр типа. Следовательно,

ТоArray&lt;Т&gt;()
(или
ToList&lt;T&gt;()
) можно было бы вызвать так:

int[] subsetAsIntArray =

  (from i in numbers where i &lt; 10 select i).ToArray();

Полезность немедленного выполнения очевидна, когда нужно возвратить результаты запроса LINQ внешнему вызывающему коду, что и будет темой следующего раздела главы.

Возвращение результатов запроса LINQ

Внутри класса (или структуры) можно определить поле, значением которого будет результат запроса LINQ. Однако для этого нельзя использовать неявную типизацию (т.к. ключевое слово

var
не может применяться к полям), и целью запроса LINQ не могут быть данные уровня экземпляра, а потому он должен быть статическим. С учетом указанных ограничений необходимость в написании кода следующего вида будет возникать редко:

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


Язык программирования C#9 и платформа .NET5 отзывы

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


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*