Поделиться через


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

Обновлен: Ноябрь 2007

В этом примере показано, как выполнить операции соединения, в которых для подстановки нужно использовать более одного ключа. Для этого применяются составные ключи. Составной ключ создается как анонимный тип или именованный тип со значениями, которые нужно сравнивать. Если переменная запроса будет передана за пределы границ метода, используйте именованный тип, переопределяющий Equals и GetHashCode для ключа. Имена свойств и их порядок должны совпадать в каждом ключе.

Пример

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

var query = from o in db.Orders
    from p in db.Products
    join d in db.OrderDetails 
        on new {o.OrderID, p.ProductID} equals new {d.OrderID,        d.ProductID} into details
        from d in details
        select new {o.OrderID, p.ProductID, d.UnitPrice};

Вывод типа в составных ключах зависит от имен свойств в ключах и их порядка. Если в исходных последовательностях имена свойств не совпадают, в ключах нужно присвоить новые имена. Например, если в таблицах Orders и OrderDetails используются разные имена столбцов, можно создать составные ключи, назначив одинаковые имена в анонимных типах:

join...on new {Name = o.CustomerName, ID = o.CustID} equals 
    new {Name = d.CustName, ID = d.CustID }

Кроме того, составные ключи можно использовать в предложении group.

Компиляция кода

  • Для компиляции и запуска этого кода выполните следующие действия.

  • Откройте Пример запроса LINQ к базе данных "Борей" и следуйте инструкциям для настройки проекта и создания подключения к базе данных.

  • В файле samples.cs создайте новый пустой метод, принимающий входной параметр Northwind с именем db (аналогичный другим методам в этом файле). Вставьте код из этого примера в текст метода.

  • Измените файл program.cs для вызова нового метода из Main.

  • Нажмите клавишу F5, чтобы скомпилировать и выполнить запрос.

См. также

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

Выражения запросов LINQ (Руководство по программированию в C#)

Ссылки

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

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