Операции соединения

Соединением двух источников данных является связь объектов из одного источника данных с объектами, имеющими общий атрибут, в другом источнике данных.

Соединение является важной операцией в запросах к источникам данных, связи которых друг с другом не могут использоваться непосредственно. В объектно-ориентированном программировании это может означать корреляцию между объектами, которая не была смоделирована, например связь в обратном направлении одностороннего отношения. Примером одностороннего отношения служит класс Customer, имеющего свойство с типом City, но класс City не имеет свойства, являющегося коллекцией объектов класса Customer. Если имеется список объектов City и требуется найти всех клиентов в каждом городе, то для их поиска можно использовать операцию соединения.

В LINQ доступны следующие методы соединения: Join и GroupJoin. Эти методы выполняют уравнивающие соединения или соединения, сопоставляющие два источника данных на основании совпадения их ключей. (Для сравнения: Transact-SQL поддерживает операторы соединения отличные от "equals", например оператор "less than".) В условиях реляционной базы данных Join реализует внутреннее соединение — тип соединения, которое возвращает только те объекты, которые имеют совпадение в другом наборе данных. Метод GroupJoin не имеет прямых аналогов в терминах реляционных баз данных, но реализует надмножества внутренних соединений и левых внешних соединений. Левое внешнее соединение представляет собой соединение, возвращающее каждый элемент первого (левого) источника данных, даже если он не имеет соответствующих элементов в другом источнике данных.

На следующем рисунке показано концептуальное представление двух множеств и элементы в этих множествах, которые включены либо во внутреннее соединение, либо во внешнее левое соединение.

Два накладывающихся кольца, отображающие внешнее/внутреннее.

Методы

Имя метода

Описание

Синтаксис выражения запроса C#

Синтаксис выражения запроса Visual Basic

Дополнительные сведения

Join

Соединяет две последовательности при помощи функции выбора ключа и извлекает пары значений.

join … in … on … equals …

From x In …, y In … Where x.a = y.a

– или –

Join … [As …]In … On …

Enumerable.Join

Queryable.Join

GroupJoin

Соединяет две последовательности на основе функции выбора ключа и группирует полученные совпадения для каждого элемента.

join … in … on … equals … into …

Group Join … In … On …

Enumerable.GroupJoin

Queryable.GroupJoin

См. также

Задачи

Как формировать соединения и запросы с перекрестными произведениями (LINQ to SQL)

Практическое руководство. Соединение с помощью составных ключей (Руководство по программированию в C#)

Практическое руководство. Объединение содержимого из файлов разных форматов (LINQ)

Практическое руководство. Упорядочение результатов предложения соединения (Руководство по программированию на C#)

Практическое руководство. Выполнение пользовательских операций соединения (Руководство по программированию на C#)

Практическое руководство. Выполнение групповых соединений (Руководство по программированию на C#)

Практическое руководство. Выполнение внутренних соединений (Руководство по программированию на C#)

Практическое руководство. Выполнение левых внешних соединений (Руководство по программированию на C#)

Практическое руководство. Заполнение коллекций объектов из нескольких источников (LINQ)

Ссылки

System.Linq

Анонимные типы (Руководство по программированию в C#)

Предложение join (Справочник по C#)

Предложение Join (Visual Basic)

Основные понятия

Общие сведения о стандартных операторах запроса

Анонимные типы (Visual Basic)

Типы соединений