- •Лабораторная работа 4. Язык linq Задание
- •Синтаксис запроса
- •Синтаксис метода
- •Смешанный синтаксис запроса и метода
- •Пример соединения с использованием простого ключа
- •Пример соединения с использованием составного ключа
- •Пример множественного соединения
- •Пример внутреннего соединения, реализуемого с помощью группового соединения
Пример внутреннего соединения, реализуемого с помощью группового соединения
В следующем примере показано, как реализовать внутреннее соединение с помощью группового соединения.
В
query1
выполняется групповое соединение списка
объектов Person
со списком объектов Pet
на основании сопоставления объекта
Person
и свойства Pet.Owner.
Групповое соединение создает коллекцию
промежуточных групп, в которой каждая
группа состоит из объекта Person
и последовательности совпадающих
объектов Pet.
При
добавлении в запрос второго предложения
from
данная последовательность из
последовательностей объединяется (или
выравнивается) в одну более длинную
последовательность. Тип элементов
конечной последовательности задается
предложением select.В
этом примере тип является анонимным
типом, состоящим из свойств Person.FirstName
и Pet.Name
каждой соответствующей пары.
Результат
query1
аналогичен результирующему набору,
полученному при использовании предложения
join
для выполнения внутреннего соединения
без предложения into.
Переменная query2
демонстрирует этот эквивалентный
запрос.
C#
Копировать
classPerson
{
publicstringFirstName { get; set; }
publicstringLastName { get; set; }
}
class Pet
{
publicstring Name { get; set; }
public Person Owner { get; set; }
}
publicstaticvoidInnerGroupJoinExample()
{
Person magnus = new Person { FirstName = "Magnus", LastName = "Hedlund" };
Person terry = new Person { FirstName = "Terry", LastName = "Adams" };
Person charlotte = new Person { FirstName = "Charlotte", LastName = "Weiss" };
Person arlene = new Person { FirstName = "Arlene", LastName = "Huff" };
Pet barley = new Pet { Name = "Barley", Owner = terry };
Pet boots = new Pet { Name = "Boots", Owner = terry };
Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
Pet bluemoon = new Pet { Name = "Blue Moon", Owner = terry };
Pet daisy = new Pet { Name = "Daisy", Owner = magnus };
// Create two lists.
List<Person> people = new List<Person>{ magnus, terry, charlotte, arlene };
List<Pet> pets = new List<Pet>{ barley, boots, whiskers, bluemoon, daisy };
var query1 = from person in people
join pet in pets on person equalspet.Ownerintogj
fromsubpetingj
selectnew { OwnerName = person.FirstName, PetName = subpet.Name };
Console.WriteLine("Inner join using GroupJoin():");
foreach (var v in query1)
{
Console.WriteLine("{0} - {1}", v.OwnerName, v.PetName);
}
var query2 = from person in people
join pet in pets on person equalspet.Owner
selectnew { OwnerName = person.FirstName, PetName = pet.Name };
Console.WriteLine("\nThe equivalent operation using Join():");
foreach (var v in query2)
Console.WriteLine("{0} - {1}", v.OwnerName, v.PetName);
}
// This code produces the following output:
//
// Inner join using GroupJoin():
// Magnus - Daisy
// Terry - Barley
// Terry - Boots
// Terry - Blue Moon
// Charlotte - Whiskers
//
// The equivalent operation using Join():
// Magnus - Daisy
// Terry - Barley
// Terry - Boots
// Terry - BlueMoon
// Charlotte - Whiskers
