private static string[] GetDownstreamLinks(Configuration_RoadwayLinkInformation linkId, double maxDistance) { List <string> results = new List <string>(); results.Add(linkId.RoadwayLinkIdentifier); if (linkId.DownstreamRoadwayLinkIdentifier != null) { Configuration_RoadwayLinkInformation nextLink = srInfloDbContext.Configuration_RoadwayLinkInformation .Find(linkId.DownstreamRoadwayLinkIdentifier); if (nextLink != null) { maxDistance -= Math.Abs(linkId.EndMileMarker - nextLink.EndMileMarker); if (maxDistance > 0) { results.AddRange(GetDownstreamLinks(nextLink, maxDistance)); } } } return(results.ToArray()); }
private static bool LoadApplicableAlerts(string linkId, out TMEOutput_Recommended_QWARN_CVMessage[] qWarnAlerts) { Configuration_RoadwayLinkInformation currentLink = srInfloDbContext.Configuration_RoadwayLinkInformation .Find(linkId); if (false && currentLink != null) { IEnumerable <string> downstreamLinks = GetDownstreamLinks(currentLink, AlertSearchDistance); //Select the latest alert for each roadwayLink. qWarnAlerts = downstreamLinks.Select(x => srInfloDbContext.TMEOutput_Recommended_QWARN_CVMessage .Where(q => q.RoadwayLinkID.Equals(x)) .OrderByDescending(q => q.Timestamp) .FirstOrDefault()) .Where(q => q != null).ToArray(); return(true); } qWarnAlerts = new TMEOutput_Recommended_QWARN_CVMessage[0]; return(false); }