/// <summary> /// Get the producer with the longest interval between two consecutive awards /// </summary> /// <param name="movies">List of winning films</param> /// <returns>List of winning producers longest interval</returns> private IEnumerable <dynamic> ProducerLongestInterval(IEnumerable <MoviesInfo> movies) { var query = movies.GroupBy(g => g.Producer) .Where(g => g.Count() > 1).ToList(); var longest = query .Select(g => { MoviesInfoResult Max = new MoviesInfoResult() { MaxInterval = Int32.MinValue , Delta = 0 , PreviousWin = 0 , FollowingWin = 0 , Producer = "" }; for (int i = 1; i < g.Count(); i++) { MoviesInfo previous = g.ElementAt(i - 1), current = g.ElementAt(i); Max.Delta = Math.Abs(current.Year - previous.Year); if (Max.Delta > Max.MaxInterval) { Max.MaxInterval = Max.Delta; Max.PreviousWin = previous.Year; Max.FollowingWin = current.Year; Max.Producer = current.Producer; } } return(new { Max }); }) .ToList(); var biggerInterval = longest.Max(x => x.Max.MaxInterval); var biggerIntervalProducer = longest.Where(x => x.Max.MaxInterval == biggerInterval); return(biggerIntervalProducer); }
/// <summary> /// Get the producer who wins two awards faster /// </summary> /// <param name="movies">List of winning films</param> /// <returns>List of producers</returns> private IEnumerable <dynamic> ProducerFastWinner(IEnumerable <MoviesInfo> movies) { var query = movies.GroupBy(g => g.Producer) .Where(g => g.Count() > 1).ToList(); var faster = query .Select(g => { MoviesInfoResult Min = new MoviesInfoResult() { MinInterval = Int32.MaxValue , Delta = 0 , PreviousWin = 0 , FollowingWin = 0 , Producer = "" }; for (int i = 1; i < g.Count(); i++) { MoviesInfo previous = g.ElementAt(i - 1), current = g.ElementAt(i); Min.Delta = Math.Abs(current.Year - previous.Year); if (Min.Delta < Min.MinInterval) { Min.MinInterval = Min.Delta; Min.PreviousWin = previous.Year; Min.FollowingWin = current.Year; Min.Producer = current.Producer; } } return(new { Min }); }).ToList(); var shorterInterval = faster.Min(x => x.Min.MinInterval); var shorterIntervalProducer = faster.Where(x => x.Min.MinInterval == shorterInterval); return(shorterIntervalProducer); }