private void FindImportEntityDuplicate(EntitySchemaQuery esq, List <Entity> entities, ImportParameters parameters, IEnumerable <ImportColumn> keyColumns, Func <ColumnExpression, object> columnValueAction) { var mainFilterGroup = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.Or); esq.Filters.Add(mainFilterGroup); var importColumns = keyColumns.ToList(); var keyColumnsCount = importColumns.Count(); foreach (var importEntity in parameters.Entities) { var columnsExpressions = GetKeyColumnsValues(parameters, importEntity, importColumns); if (!columnsExpressions.Any()) { continue; } var filters = GetKeyColumnsFilters(esq, columnsExpressions, columnValueAction); mainFilterGroup.Add(filters); var parametersCount = mainFilterGroup.Count * keyColumnsCount; if (parametersCount >= MaxQueryParametersCount) { AddEntitiesRange(esq, entities); esq.ResetSelectQuery(); mainFilterGroup.Clear(); } } if (mainFilterGroup.Any()) { AddEntitiesRange(esq, entities); } }
private void AddExportFiltersBySettings(SyncContext context, EntitySchemaQuery esq) { UserConnection userConnection = context.UserConnection; esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "CreatedBy", userConnection.CurrentUser.ContactId)); if (UserSettings.ExportContactsAll) { return; } var contactTypeFilters = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.Or); if (UserSettings.ExportContactsEmployers) { contactTypeFilters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "Type", ExchangeConsts.ContactEmployeeTypeId)); } if (UserSettings.ExportContactsCustomers) { contactTypeFilters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "Type", ExchangeConsts.ContactCustomerTypeId)); } if (UserSettings.ExportContactsOwner) { contactTypeFilters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "Owner", userConnection.CurrentUser.ContactId)); } if (UserSettings.ExportContactsFromGroups) { AddContactsDynamicGroupFilters(UserSettings.LocalFolderUIds, userConnection, contactTypeFilters); } if (!contactTypeFilters.Any()) { esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, esq.RootSchema.PrimaryColumn.Name, Guid.Empty)); return; } esq.Filters.Add(contactTypeFilters); }