Сущность: Общая собственность - Нахождение спорта, которым занимаются все студенты - PullRequest
1 голос
/ 13 октября 2019

Я хотел бы найти общее свойство, которое появляется во всех моделях.

В настоящее время у меня есть два класса моделей Student и Sport. Студент может заниматься несколькими видами спорта. Я хотел бы найти все виды спорта, в которых играют все студенты.

Вот так выглядят мои модели

public class DbContext : DbContext
{
        public DbContext(): base("name=DbContext")
        {
        }

        public DbSet<Student> MyStudents { get; set; }
        public DbSet<Sport> MySports { get; set; }
}

public class Student
{
    public List<Sport> Actions { get; set; }

    public string Name { get; set; }
}

public class Sport
{
    public string SportName { get; set; }
}

Мой вопрос: как мне получить список всех сыгранных видов спорта? всеми студентами? Короче я ищу общий вид спорта. Таким образом, в основном в следующем случае

Student A played Sports : Soccer , Tennis , Bowling
Student B played Sports : Soccer , Tennis , 
Student C played Sport  : Tennis

Тогда должен быть возвращен только Теннис и только один раз (Не несколько Теннисных Экземпляров). Это то, что я сделал

var sports = context.Sports;
var commonSports = sports.Where(sport =>
    students.All(student => student.Actions.Any(studSport => 
         studSport.SportName == sport.SportName)));

Однако приведенное выше дает несколько результатов. Т.е. многократный теннис, а не только один. Любые предложения о том, что я могу делать не так?

1 Ответ

0 голосов
/ 14 октября 2019

Вы должны использовать SelectMany, чтобы сгладить списки возвращаемых видов спорта, и Disctinct, чтобы избежать дублирования.

var commonSports = students.SelectMany(x => x.Actions).Distinct();
...