private void OnSecondTypeSelected() { if (_selectedSecondType is BaseEntityDto <School> school) { var projects = _projectFilterByVolunteerSpecification.FilterByVolunteers(DtoHelper.MapProjectsDtoToProjects(_allProjects).ToList(), GetVolunteersFromSchoolId(school.Entity.Id, DtoHelper.MapBaseEntityDtosToBaseEntities(_volunteersDto)).ToList()); _projects = new ObservableCollection <ProjectDto>(DtoHelper.MapProjectsToProjectDto(projects.Distinct().ToList())); RaisePropertyChanged(nameof(Projects)); } else { var vol = _selectedSecondType is BaseEntityDto <Volunteer> volunteer; if (vol) { volunteer = (BaseEntityDto <Volunteer>)_selectedSecondType; var projects = _projectFilterByVolunteerSpecification.Filter(DtoHelper.MapProjectsDtoToProjects(_allProjects).ToList(), volunteer.Entity); _projects = new ObservableCollection <ProjectDto>(DtoHelper.MapProjectsToProjectDto(projects.Distinct().ToList())); RaisePropertyChanged(nameof(Projects)); } } IEnumerable <Volunteer> GetVolunteersFromSchoolId(int schoolId, IEnumerable <Volunteer> volunteers) { foreach (var volunteer in volunteers) { foreach (var sv in volunteer.SchoolVolunteers) { if (sv.SchoolId == schoolId && sv.IsActual) { yield return(volunteer); break; } } } } }