/// <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); }
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); }