Применение вложенных операторов from

Запрос может состоять из нескольких операторов fгom от, которые оказываются в этом случае вложенными. Такие операторы from находят применение в тех случаях, когда по запросу требуется получить данные из двух разных источников. Рассмотрим простой пример, в котором два вложенных оператора from используются в запросе для циклического обращения к элементам двух разных массивов символов. В итоге по такому запросу формируется последовательность результатов, содержащая все возможные комбинации двух наборов символов.

// Использовать два вложенных оператора from для составления списка

// всех возможных сочетаний букв А, В и С с буквами X, Y и Z.

using System;

using System.Linq;

// Этот класс содержит результат запроса,

class ChrPair {

  public char First;

  public char Second;

  public ChrPair(char c, char c2) {

    First = c;

    Second = c2;

  }

}

class MultipleFroms {

  static void Main() {

    char[] chrs = { 'A', 'В', 'C' };

    char[] chrs2 = { 'X', 'Y', 'Z' };

    // В первом операторе from организуется циклическое обращение

    //к массиву символов chrs, а во втором операторе from —

    // циклическое обращение к массиву символов chrs2.

    var pairs = from ch1 in chrs

                  from ch2 in chrs2

                    select new ChrPair(ch1, ch2);

    Console.WriteLine("Все сочетания букв ABC и XYZ: ");

    foreach(var p in pairs)

      Console.WriteLine("{0} {1}", p.First, p.Second);

  }

}

Выполнение этого кода приводит к следующему результату.

Все сочетания букв ABC и XYZ:

А X

A Y

A Z

В X

В Y

В Z

С X

С Y

С Z

Этот пример кода начинается с создания класса ChrPair, в котором содержатся результаты запроса. Затем в нем создаются два массива, chrs и chrs2, и, наконец, формируется следующий запрос для получения всех возможных комбинаций двух последовательностей результатов.

var pairs = from ch1 in chrs

  from ch2 in chrs2

select new ChrPair(ch1, ch2);

Во вложенных операторах from организуется циклическое обращение к обоим массивам символов, chrs и chrs2. Сначала из массива chrs получается символ, сохраняемый в переменной ch1. Затем перечисляется содержимое массива chrs2. На каждом шаге циклического обращения во внутреннем операторе from символ из массива chrs2 сохраняется в переменной ch2 и далее выполняется оператор select. В результате выполнения оператора select создается новый объект типа ChrPair, содержащий пару символов, которые сохраняются в переменных ch1 и ch2 на каждом шаге циклического обращения к массиву во внутреннем операторе from. А в конечном итоге получается объект типа ChrPair, содержащий все возможные сочетания извлекаемых символов.

Вложенные операторы from применяются также для циклического обращения к источнику данных, который содержится в другом источнике данных. Соответствующий пример приведен в разделе "Применение оператора let для создания временной переменной в запросе" далее в этой главе.

Более 800 000 книг и аудиокниг! 📚

Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением

ПОЛУЧИТЬ ПОДАРОК