public static List<ObservationPeriod> GetObservationPeriods(int gap, EraEntity[] entities) { return GetEras(entities, gap, -1).Select( period => new ObservationPeriod { PersonId = period.PersonId, StartDate = period.StartDate, EndDate = period.EndDate.Value }). ToList(); }
public static IEnumerable <EraEntity> GetEras(IEnumerable <IEntity> entities, int gap1, int type1) { var filterdEntities = entities.Where(e => e.IncludeInEra()).ToList(); var eraConceptIds = new HashSet <int>(); foreach (var entity in filterdEntities) { if (entity.Ingredients != null && entity.Ingredients.Count > 0) { foreach (var ingredient in entity.Ingredients) { eraConceptIds.Add(ingredient); } } else { entity.Ingredients = new List <int> { entity.ConceptId }; eraConceptIds.Add(entity.ConceptId); } } foreach (int eraConceptId in eraConceptIds) { int ecId = eraConceptId; IEnumerable <IEntity> containedEntities = filterdEntities.Where(d => d.Ingredients.Contains(ecId)); List <IEntity> ordered = containedEntities.OrderBy(d => d.StartDate).ThenBy(d => d.EndDate).ToList(); if (ordered.Count > 1) { var era = new EraEntity { PersonId = ordered[0].PersonId, ConceptId = ecId, StartDate = ordered[0].StartDate, EndDate = GetEndDate(ordered[0]), TypeConceptId = type1, GapDays = 0, OccurrenceCount = 1 }; foreach (var entity in ordered.Skip(1)) { var currentGap = entity.StartDate.Subtract(era.EndDate.Value).Days; if (currentGap > gap1) { yield return(era); era = new EraEntity { PersonId = entity.PersonId, ConceptId = ecId, StartDate = entity.StartDate, EndDate = GetEndDate(entity), TypeConceptId = type1, GapDays = 0, OccurrenceCount = 1 }; } else { if (currentGap > 0) { era.GapDays += currentGap; } if (GetEndDate(entity) > era.EndDate) { era.EndDate = GetEndDate(entity); } era.OccurrenceCount++; } } yield return(era); } else { yield return(new EraEntity { PersonId = ordered[0].PersonId, ConceptId = ecId, StartDate = ordered[0].StartDate, EndDate = GetEndDate(ordered[0]), TypeConceptId = type1, GapDays = 0, OccurrenceCount = 1 }); } } }
public static IEnumerable <EraEntity> GetEras(IEnumerable <IEntity> entities, int gap1, int type1) { var filterdEntities = entities.Where(e => e.IncludeInEra()).ToList(); var eraConceptIds = new Dictionary <long, bool>(); foreach (var eraConceptId in filterdEntities.SelectMany(entity => entity.GetEraConceptIds().Where(eraConceptId => eraConceptId.HasValue))) { eraConceptIds[eraConceptId.Value] = false; } foreach (long eraConceptId in eraConceptIds.Keys) { long ecId = eraConceptId; IEnumerable <IEntity> containedEntities = filterdEntities.Where(d => d.GetEraConceptIds().Contains(ecId)); List <IEntity> ordered = containedEntities.OrderBy(d => d.StartDate).ThenBy(d => d.EndDate).ToList(); if (ordered.Count > 1) { var era = new EraEntity { PersonId = ordered[0].PersonId, ConceptId = ecId, StartDate = ordered[0].StartDate, EndDate = GetEndDate(ordered[0]), TypeConceptId = type1, GapDays = 0, OccurrenceCount = 1 }; foreach (var entity in ordered.Skip(1)) { var currentGap = entity.StartDate.Subtract(era.EndDate.Value).Days; if (currentGap > gap1) { yield return(era); era = new EraEntity { PersonId = entity.PersonId, ConceptId = ecId, StartDate = entity.StartDate, EndDate = GetEndDate(entity), TypeConceptId = type1, GapDays = 0, OccurrenceCount = 1 }; } else { if (currentGap > 0) { era.GapDays += currentGap; } if (GetEndDate(entity) > era.EndDate) { era.EndDate = GetEndDate(entity); } era.OccurrenceCount++; } } yield return(era); } else { yield return(new EraEntity { PersonId = ordered[0].PersonId, ConceptId = ecId, StartDate = ordered[0].StartDate, EndDate = GetEndDate(ordered[0]), TypeConceptId = type1, GapDays = 0, OccurrenceCount = 1 }); } } }
public static IEnumerable<EraEntity> GetEras(IEnumerable<IEntity> entities, int gap1, int type1) { var filterdEntities = entities.Where(e => e.IncludeInEra()).ToList(); var eraConceptIds = new Dictionary<long, bool>(); foreach (var eraConceptId in filterdEntities.SelectMany(entity => entity.GetEraConceptIds().Where(eraConceptId => eraConceptId.HasValue))) { eraConceptIds[eraConceptId.Value] = false; } foreach (long eraConceptId in eraConceptIds.Keys) { long ecId = eraConceptId; IEnumerable<IEntity> containedEntities = filterdEntities.Where(d => d.GetEraConceptIds().Contains(ecId)); List<IEntity> ordered = containedEntities.OrderBy(d => d.StartDate).ThenBy(d => d.EndDate).ToList(); if (ordered.Count > 1) { var era = new EraEntity { PersonId = ordered[0].PersonId, ConceptId = ecId, StartDate = ordered[0].StartDate, EndDate = GetEndDate(ordered[0]), TypeConceptId = type1, OccurrenceCount = 1 }; foreach (var entity in ordered.Skip(1)) { if (entity.StartDate.Subtract(era.EndDate.Value).Days > gap1) { yield return era; era = new EraEntity { PersonId = entity.PersonId, ConceptId = ecId, StartDate = entity.StartDate, EndDate = GetEndDate(entity), TypeConceptId = type1, OccurrenceCount = 1 }; } else { if (GetEndDate(entity) > era.EndDate) era.EndDate = GetEndDate(entity); era.OccurrenceCount++; } } yield return era; } else { yield return new EraEntity { PersonId = ordered[0].PersonId, ConceptId = ecId, StartDate = ordered[0].StartDate, EndDate = GetEndDate(ordered[0]), TypeConceptId = type1, OccurrenceCount = 1 }; } } }