Книга: 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 для создания временной переменной в запросе" далее в этой главе.
- Основы LINQ
- Общая форма запроса
- Отбор запрашиваемых значений с помощью оператора where
- Сортировка результатов запроса с помощью оператора orderby
- Подробное рассмотрение оператора select
- Применение вложенных операторов from
- Группирование результатов с помощью оператора group
- Продолжение запроса с помощью оператора into
- Применение оператора let для создания временной переменной в запросе
- Объединение двух последовательностей с помощью оператора join
- Анонимные типы
- Создание группового объединения
- Методы запроса
- Режимы выполнения запросов: отложенный и немедленный
- Деревья выражений
- Методы расширения
- PLINQ
- 4.7.6. Ассоциативность операторов
- Инструкция INSERT INTO ... FROM ... UNION ...
- Creating CDs from the Command Line
- Применение функции scanf( )
- Применение PHP-технологий в программе HtmlPad
- 17.6 Применение агентов новостей для настольных систем
- 2.3. Эмпирическая модель обучения Дэвида Колба и ее применение в практике бизнес-тренинга
- Применение основного потока
- Применение пользовательских атрибутов
- Просмотр и сохранение вложенных файлов
- Применение peristaltic.py к арматуре
- Chapter 2. Four Puzzles From Cyberspace