Ядро Entity Framework: Запрос на составную таблицу (составной ключ) - PullRequest
0 голосов
/ 24 мая 2018

I.Привет!Я создаю составной ключ ProjectSubProject для моих моделей: Project и SubProject .У меня проблема с созданием запроса GetAllProjects, я хочу получить структуру

IGrouping<Project, IEnumerable<SubProject>> or IDictionary, но я получаю IGrouping<Project, IEnumerable<GetAllProjectsViewModel>>

Вот мой запрос:

return _context.ProjectSubProjects
                .Include(ps => ps.Project)
                .Include(ps => ps.SubProject)
                .Select(ps => new GetAllProjectsViewModel
                {
                    Project = ps.Project,
                    SubProject = ps.SubProject,
                })
                .GroupBy(ps => ps.Project);

Project.cs:

public class Project
    {
        // PK
        public int Id { get; set; }

        public string ProjectName { get; set; }

    }

SubProject.cs:

public class SubProject
    {
        // PK
        public int Id { get; set; }

        public string SubProjectName { get; set; }
    }

ProjectSubProject.cs

public class ProjectSubProject
    {
        // PK
        public int ProjectId { get; set; }
        public Project Project { get; set; }

        // PK
        public int SubProjectId { get; set; }
        public SubProject SubProject { get; set; }
    }

enter image description here

1 Ответ

0 голосов
/ 24 мая 2018

Чтобы получить IEnumerable<IGrouping<Project, IEnumerable<SubProject>>> от вашей модели, Include или Select не требуется.Вы можете просто использовать перегрузку метода GroupBy, которая позволяет передавать селектор элемента:

return _context.ProjectSubProjects
    .GroupBy(ps => ps.Project, ps => ps.SubProject);

Обновление: Чтобы включить информацию о проекте вПредставление Json, вы можете проецировать результат на перечисляемый некоторый специальный или анонимный тип, имеющий свойства Project и SubProjects.Как то так:

return _context.ProjectSubProjects
    .GroupBy(ps => ps.Project, ps => ps.SubProject)
    .Select(g => new { Project = g.Key, SubProjects = g });
...