/// <summary>
        /// Returns Result containing the unadjusted seedtime for the Swimmer in the given HeatSheetEvent for the specified SeedTimeType
        /// </summary>
        /// <param name="HeatSheetEventID"></param>
        /// <param name="SeedTimeType"></param>
        /// <returns></returns>
        public Result GetSeedTime(int HeatSheetEventID, int SwimmerTeamSeasonID, SeedTimeType SeedTimeType)
        {
            Result returnResult = new Result();
            SwimmerTeamSeason sts = Ctx.SwimmerTeamSeasonManager.SwimmerTeamSeasonGet(SwimmerTeamSeasonID);
            ResultCollection results = Ctx.ResultManager.ResultGetAllByHeatSheetEventIDSwimmerID(HeatSheetEventID, sts.SwimmerID); //Returns all results for this swimmer, for the stroke & distance in the given HSE
            if (results.Count > 0)
            {
                switch (SeedTimeType)
                {
                    case SeedTimeType.MostRecent:
                        results.Sort("EventDate", LAAF.Common.Helper.SortDirection.Descending);
                        returnResult = results[0];
                        break;
                    case SeedTimeType.SeasonBest:
                        Season s = Ctx.SeasonManager.SeasonGetByHeatSheetEventID(HeatSheetEventID);
                        IEnumerable<Result> sortedResults = from r in results where r.EventDate > s.StartDate orderby r.ElapsedTime ascending select r;
                        if (sortedResults.Count() > 0)
                        {
                            returnResult = ((Result)sortedResults.First());
                        }
                        break;
                    case SeedTimeType.PersonalBest:
                        results.Sort("ElapsedTime", LAAF.Common.Helper.SortDirection.Ascending);
                        returnResult = results[0];
                        break;
                    default:
                        break;
                }
            }
            //if no results are returned, return an empty result with the Swimmer's ID
            else
            {
                returnResult.SwimmerTeamSeasonID = sts.SwimmerTeamSeasonID;
                returnResult.ElapsedTime = 0D;
            }

            return returnResult;
        }
 /// <summary>
 /// Returns a Dictionary<TeamID,List<Result>> object containing the seed times for the members of a team, grouped by team
 /// </summary>
 /// <param name="HeatSheetEventID"></param>
 /// <param name="SwimmerTeamSeasonIDs"></param>
 /// <param name="seedTimeType"></param>
 /// <returns></returns>
 private Dictionary<int, List<Result>> GetTeamResults(int HeatSheetEventID, List<int> SwimmerTeamSeasonIDs, SeedTimeType seedTimeType)
 {
     Dictionary<int, List<Result>> teamResults = new Dictionary<int, List<Result>>();
     //get the SeedTime for each swimmer
     Result result = null;
     foreach (int swimmerTeamSeasonID in SwimmerTeamSeasonIDs)
     {
         SwimmerTeamSeason sts = Ctx.SwimmerTeamSeasonManager.SwimmerTeamSeasonGet(swimmerTeamSeasonID);
         result = GetSeedTime(HeatSheetEventID, swimmerTeamSeasonID, seedTimeType);
         result.ElapsedTime = (result.ElapsedTime > 0) ? result.ElapsedTime : 100000.0D;
         if (!teamResults.Keys.Contains(sts.TeamSeasonID))
         {
             teamResults.Add(sts.TeamSeasonID, new List<Result>());
         }
         ((List<Result>)teamResults[sts.TeamSeasonID]).Add(result);
     }
     foreach (KeyValuePair<int, List<Result>> item in teamResults)
     {
         item.Value.Sort(delegate(Result s1, Result s2) { return s1.ElapsedTime.CompareTo(s2.ElapsedTime); });
     }
     return teamResults;
 }