Книга: C# 4.0: полное руководство

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

Применение вложенных операторов 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 для создания временной переменной в запросе" далее в этой главе.

Оглавление книги


Генерация: 2.012. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз