private DuplicatesGroupResponse ConvertServerEntityToClientEntity(EntitySchemaQuery esq, List <EntityDuplicatesGroup> entityGroups) { DuplicatesGroupResponse result = new DuplicatesGroupResponse() { Groups = new Collection <EntityClientDuplicatesGroup>() }; Dictionary <string, string> serverToClientColumnNameMap = GetQueryColumns(esq); foreach (EntityDuplicatesGroup groupItem in entityGroups) { EntityCollection convertedEntities = QueryExtension.GetEntityCollection(groupItem.Duplicates, serverToClientColumnNameMap); EntityClientDuplicatesGroup clientGroup = new EntityClientDuplicatesGroup() { GroupId = groupItem.GroupId, Rows = convertedEntities }; result.Groups.Add(clientGroup); } if (result.Groups.Any()) { Dictionary <string, object> columnConfig = QueryExtension.GetColumnConfig(esq, serverToClientColumnNameMap); result.RowConfig = columnConfig; } result.Groups.OrderBy(group => group.GroupId); return(result); }
/// <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); }
public string GetDeduplicationResults(string schemaName, string[] columns, int offset) { DeduplicationProcessing deduplicationProcessing = ClassFactory.Get <DeduplicationProcessing>(new ConstructorArgument("userConnection", UserConnection)); DuplicatesGroupResponse objectResult = deduplicationProcessing.GetDeduplicationResults(schemaName, columns, offset); string result = JsonConvert.SerializeObject(objectResult); return(result); }