public IEnumerable <IPresentation> GetFilteredPresentations(IEventFilters filters) { // Check if filtered event and event years are already stored and if not download all event data _feedService.DownloadFilteredEventData(filters); // Get a list of Presentation objects List <IPresentation> presentations = null; // Get filtered Session ids var filteredSessionIds = _sessionRepository.FilterSessions(filters); if (filteredSessionIds != null) { var sessions = _sessionRepository.GetSessionsInSessionIdList(filteredSessionIds); // Filter for selected speakers if (filters.SpeakerIds != null && filters.SpeakerIds.Count() > 0) { var videoIds = _speakerVideoRepository.GetVideoIdListWhereInSpeakerIdList(filters.SpeakerIds); var videos = _videoRepository.GetVideosByVideoIdList(videoIds); var videoMetaData = videos.Select(x => new { x.EventName, x.EventYear, x.SessionCode }).Distinct().ToList(); var filteredSessions = new List <ISession>(); foreach (var videoData in videoMetaData) { var sessionToAdd = sessions.Where(x => x.EventName == videoData.EventName && x.EventYear == videoData.EventYear && x.Code == videoData.SessionCode).FirstOrDefault(); if (sessionToAdd != null) { filteredSessions.Add(sessionToAdd); } } sessions = filteredSessions; } if (sessions != null) { var converter = new Converter <ISession, IPresentation>(SessionToPresentation); presentations = sessions.ToList().ConvertAll(converter); foreach (var presentation in presentations) { GetExtendedPresentationData(presentation); } } } return(presentations); }