Как работать со связями многие-ко-многим, используя linq?

Пользователь

от stephania , в категории: Другие , 5 месяцев назад

Как работать со связями многие-ко-многим, используя linq?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от forest , 5 месяцев назад

@stephania 

Вот пример того, как можно работать с отношениями многие-ко-многим в LINQ:


Предположим, у нас есть две сущности: "Студент" и "Курс". Один студент может записаться на несколько курсов, и один курс может иметь несколько студентов.

  1. Создайте классы для студента и курса:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Course> Courses { get; set; }
}

public class Course
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Student> Students { get; set; }
}


  1. Создайте коллекции студентов и курсов, и заполните их данными:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
List<Student> students = new List<Student>
{
    new Student { Id = 1, Name = "Студент 1" },
    new Student { Id = 2, Name = "Студент 2" },
    new Student { Id = 3, Name = "Студент 3" }
};

List<Course> courses = new List<Course>
{
    new Course { Id = 1, Name = "Курс 1" },
    new Course { Id = 2, Name = "Курс 2" },
    new Course { Id = 3, Name = "Курс 3" }
};


  1. Выполните операцию связи многие-ко-многим с помощью методов LINQ. Например, добавим несколько студентов на курсы:
1
2
3
4
5
6
7
students[0].Courses = new List<Course> { courses[0], courses[2] };
students[1].Courses = new List<Course> { courses[1] };
students[2].Courses = new List<Course> { courses[0], courses[1] };

courses[0].Students = new List<Student> { students[0], students[2] };
courses[1].Students = new List<Student> { students[1], students[2] };
courses[2].Students = new List<Student> { students[0] };


  1. Используйте LINQ-запросы, чтобы получить нужные данные. Например, найдем все курсы, на которые записан студент с определенным идентификатором:
1
2
3
int studentId = 1;
var selectedCourses = students.Where(s => s.Id == studentId)
    .SelectMany(s => s.Courses);


В этом примере мы используем метод Where(), чтобы найти студента с заданным Id, а затем метод SelectMany(), чтобы выбрать все его курсы. В результате получим коллекцию курсов, на которые записан указанный студент.


Это простой пример работы со связями многие-ко-многим с использованием LINQ. Как и с любыми элементами LINQ, можно использовать и другие методы для решения различных задач и получения нужных данных.