C#
Создаем новое консольное приложение C# и пишем:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Person
{
public string Name { get; set; }
public string Code { get; set; }
}
class Book
{
public string Title { get; set; }
public int Price { get; set; }
public string PersonCode { get; set; }
}
class Program
{
static void Main(string[] args)
{
// array Person
Person[] persons = new Person[]
{
new Person(){ Name = "Evgen", Code = "EVG" },
new Person(){ Name = "Valera", Code = "VAL" },
new Person(){ Name = "Sergey", Code = "SER" },
};
// fill
Book[] books = new Book[]
{
new Book(){ Title = "Путешествие по Индии", Price = 23 , PersonCode = "EVG"},
new Book(){ Title = "Умный дом и устройства", Price = 23 , PersonCode = "VAL"},
new Book(){ Title = "Волшебник средиземноморья", Price = 10 , PersonCode = "EVG"},
new Book(){ Title = "Изучаем C#", Price = 23 , PersonCode = "SER"},
new Book(){ Title = "Изучаем Andriod", Price = 15 , PersonCode = "VAL"},
};
// GroupJoin добавляет нужную коллекцию книг в каждый элемент persons
var result = persons.GroupJoin(books, // все книги
item1 => item1.Code, // по этому полю связываем class Person
item2 => item2.PersonCode, // по этому полю связываем class Book
(person, relatedbooks) => // делегат с параметрами (Person person, Book[] relatedbooks)
// в делегате мы возвращаем новый тип
// class
// {
// string resultPersonName;
// Book[] resultBooks;
// }
new
{
resultPersonName = person.Name,
resultBooks = relatedbooks,
});
// смотрим что получилось
foreach (var newPerson in result)
{
// показать на экране resultPersonName
Console.WriteLine("{0}", newPerson.resultPersonName);
// показать на экране каждый book
foreach (Book book in newPerson.resultBooks)
{
Console.WriteLine(" {0}", book.Title);
}
// новая линия
Console.WriteLine("");
}
}
}
}