コード例 #1
0
ファイル: EraHelper.cs プロジェクト: bradanton/ETL-CDMBuilder
 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();
 }
コード例 #2
0
ファイル: EraHelper.cs プロジェクト: lanicon/ETL-CDMBuilder
        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
                    });
                }
            }
        }
コード例 #3
0
        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
                    });
                }
            }
        }
コード例 #4
0
ファイル: EraHelper.cs プロジェクト: bradanton/ETL-CDMBuilder
        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
                          };
                }
            }
        }