Объединение списков внутри запроса LINQ - PullRequest
1 голос
/ 20 апреля 2011

Моя структура данных настроена таким образом

  • Пользователь принимает несколько модулей
  • Модуль содержит ряд курсов

Вот как выглядят отношения: enter image description here

Как получить список курсов, которые посещает пользователь?

Теперь у меня есть запрос:

  var courses = (from ClassEnrollment enrolment in entities.ClassEnrollment
                       where enrolment.UserID == UserID
                       join Module module in entities.Module
                         on enrolment.ModuleID equals module.ID

                         select module.Course
                     ).ToList();

Однако это не приводит к списку курсов, а скорее к списку курсов.

Как мне сгладить этот запрос в список отдельных курсов?

Ответы [ 4 ]

2 голосов
/ 20 апреля 2011

Согласно вашему скриншоту структуры данных, у вас есть отношение «один ко многим» между ClassEnrollment и Module, а также свойство навигации, называемое Module.У вас также есть отношение многие ко многим между Module и Course, но навигационное свойство должно называться Courses.Учитывая ваш код, вы хотите что-то вроде этого:

var courses = entities.
              ClassEnrollment.
              Where(e => e.UserID == UserID).
              SelectMany(e => e.Module.Courses).
              ToList();

Ваш вопрос, однако, упоминает пользователя: A user takes a number of modules, How do I get a list of courses the user takes?.Однако я нигде не вижу ни одной сущности пользователя, поэтому было бы неплохо, если бы вы могли уточнить.Используете ли вы LINQ-to-SQL, кстати?

1 голос
/ 20 апреля 2011

Вы можете использовать

courses.SelectMany (c => c);

В вашем запросе не нужно явно указывать тип для переменных диапазона

Или вы можете присоединиться к курсу на запрос

var query = from enrolment in entities.ClassEnrollment
            join module in entities.Module on enrolment.ModuleID equals module.ID
            join course in entities.Course on module.CourseID equals course.ID
            where enrolment.UserID == UserID
            select course;

var course = query.ToList();
1 голос
/ 20 апреля 2011

Примерно так:

var courses = from ClassEnrollment enrolment in entities.ClassEnrollment
              from module in entities.Module
              where enrolment.ModuleID equals module.ID && enrolment.UserID equals UserID
              select module.Course
1 голос
/ 20 апреля 2011

Использовать ВыбратьМани .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...