Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций (C#).pdf
Скачиваний:
39
Добавлен:
25.03.2016
Размер:
2.43 Mб
Скачать

9.3.5 Метод Join

Метод Join(inner, outerKeySelector, innerKeySelector, resultSelector) используется для соединения двух наборов данных по некоторому признаку. Параметры данного метода имеют следующее назначение:

inner – последовательность, с которой производится соединение;

outerKeySelector – реализация делегата Func, входным параметром которого является элемент исходной последовательности, а выходным – значение, по которому осуществляется соединение с элементов второй последовательности;

innerKeySelector – реализация делегата Func, входным параметром которого является элемент второй последовательности, а выходным – значение, по которому осуществляется соединение с элементов исходной последовательности;

resultSelector – реализация делегата Func, входными параметрами которого является элементы последовательностей, а выходным – результирующее значение для заданной пары элементов.

Пример 1: вывести студентов в алфавитном порядке фамилий с указанием в

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

class Group

 

 

{

 

 

public int ID;

// Уникальный идентификатор группы

public string Name;

// Наименование группы

}

 

 

class Student

 

 

{

 

 

public string Surname;

// Фамилия студента

 

public int YearOfBirth;

// Год рождения студента

public int GroupID;

// Принадлежность к группе

}

 

 

Group[] Groups = new Group[4];

 

Groups[0] = new Group() { ID = 1, Name = "АБВ" };

 

Groups[1] = new Group() { ID = 2, Name = "ННН" };

 

Groups[2] = new Group() { ID = 3, Name = "ЯАП" };

 

Groups[3] = new Group() { ID = 4, Name = "КЕП" };

 

Student[] Students = new Student[6];

 

Students[0] = new Student() { Surname = "Иванов",

 

 

YearOfBirth = 1990,

GroupID = 1 };

Students[1] = new Student() { Surname = "Петров",

 

 

YearOfBirth = 1985, GroupID = 4 };

Students[2] = new Student() { Surname = "Смирнов",

 

 

YearOfBirth = 1990,

GroupID = 3 };

Students[3] = new Student() { Surname = "Антонов",

 

 

YearOfBirth = 1993,

GroupID = 1 };

Students[4] = new Student() { Surname = "Иванов",

 

 

YearOfBirth = 1993,

GroupID = 4 };

167

Students[5] = new Student() { Surname = "Петров",

YearOfBirth = 1992, GroupID = 4 };

var Result = Groups.Join(Students, g => g.ID, s => s.GroupID, (g, s) => new { gName = g.Name, sName = s.Surname })

.OrderBy(p => p.sName);

Result_TB.Clear(); foreach (var p in Result)

Result_TB.AppendText(p.sName + " (" + p.gName + ")\n");

Результат будет выведен в виде:

Антонов (АБВ) Иванов (АБВ) Иванов (КЕП) Петров (КЕП) Петров (КЕП) Смирнов (ЯАП)

Пример 2: реализация предыдущего примера с помощью методов.

int F1(Group g)

{

return g.ID;

}

int F2(Student s)

{

return s.GroupID;

}

class GS

{

public string gName, sName;

}

GS F3(Group g, Student s)

{

return new GS() { gName = g.Name, sName = s.Surname };

}

string F4(GS p)

{

return p.sName;

}

var Result = Groups.Join(Students, F1, F2, F3)

.OrderBy(F4);

168