Esempio n. 1
0
        /// <summary>
        /// Returns groups of duplicates.
        /// </summary>
        /// <param name="schemaName">Schema name.</param>
        /// <param name="columns">Requested columns.</param>
        /// <param name="offset">Start position for groups.</param>
        /// <returns>Instance <see cref="DuplicatesGroupResponse"/> contains groups of duplicates.</returns>
        public virtual DuplicatesGroupResponse GetDeduplicationResults(string schemaName, string[] columns,
                                                                       int offset)
        {
            offset = offset == 0 ? 1 : offset;
            List <InitialResultItem> initialResults = GetInitialResults(schemaName, offset);
            DuplicatesGroupResponse  result         = new DuplicatesGroupResponse();

            if (initialResults.Any())
            {
                int groupIdMax = initialResults.Max(initialItem => initialItem.GroupId);
                RemoveInappropriateRecordsByRight(schemaName, initialResults);
                EntitySchemaQuery        esqEntityResults = GetEsqForInitialRecords(schemaName, offset, columns);
                EntitySchemaQueryOptions options          = new EntitySchemaQueryOptions {
                    PageableDirection       = PageableSelectDirection.First,
                    PageableRowCount        = RowsPerRequest,
                    PageableConditionValues = new Dictionary <string, object>()
                };
                Core.Entities.EntityCollection entityResults = esqEntityResults.GetEntityCollection(_userConnection, options);
                List <EntityDuplicatesGroup>   entityGroups  = GroupEntityResults(initialResults, entityResults);
                PrepareResults(entityGroups);
                result = ConvertServerEntityToClientEntity(esqEntityResults, entityGroups);
                if (initialResults.Select(group => group.GroupId).Distinct().Count() == GroupsPerRequest)
                {
                    result.NextOffset = groupIdMax;
                    result.NextOffset++;
                }
            }
            return(result);
        }
Esempio n. 2
0
        private List <EntityDuplicatesGroup> GroupEntityResults(List <InitialResultItem> initResults,
                                                                Core.Entities.EntityCollection entities)
        {
            List <EntityDuplicatesGroup> result = new List <EntityDuplicatesGroup>();

            foreach (var initResult in initResults)
            {
                Entity entity = entities.Find(initResult.RecordId);
                if (entity != null)
                {
                    EntityDuplicatesGroup groupItem =
                        result.FirstOrDefault(group => group.GroupId == initResult.GroupId);
                    if (groupItem == null)
                    {
                        groupItem = new EntityDuplicatesGroup()
                        {
                            GroupId    = initResult.GroupId,
                            Duplicates = new Core.Entities.EntityCollection(_userConnection, entity.SchemaName)
                        };
                        result.Add(groupItem);
                    }
                    groupItem.Duplicates.Add(entity);
                }
            }
            return(result);
        }