private static string CreatePartitionKeyFilter(TraceRecord oneRecord, TraceRecordFilter userFilterForRecord) { var partitionKeyFilter = string.Empty; var mapping = Mapping.TraceRecordAzureDataMap.Single(item => item.Type == oneRecord.GetType()); // Calculate partition filter (if data type is static) if (mapping.PartitionDataType == PartitionDataType.StaticData) { var queryFilter = TableQuery.GenerateFilterCondition(WellKnownFields.PartitionKey, QueryComparisons.Equal, mapping.PartitionKeyDetail); partitionKeyFilter = string.IsNullOrEmpty(partitionKeyFilter) ? queryFilter : TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, queryFilter); } if (userFilterForRecord == null || !userFilterForRecord.Filters.Any()) { return(partitionKeyFilter); } // If Partition Filter data is dynamic, try to create partition filter. if (mapping.PartitionDataType == PartitionDataType.PropertyName) { var userFilterForPartitionProperty = userFilterForRecord.Filters.SingleOrDefault(item => item.Name == mapping.PartitionKeyDetail); if (userFilterForPartitionProperty != null) { var queryFilter = CreateAzureTableQueryPropertyFilter(WellKnownFields.PartitionKey, userFilterForPartitionProperty.Value, QueryComparisons.Equal); partitionKeyFilter = string.IsNullOrEmpty(partitionKeyFilter) ? queryFilter : TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, queryFilter); } } return(partitionKeyFilter); }
// Create filter at Record level. public static string CreateQueryFilterForSingleRecord(TraceRecord oneRecord, TraceRecordFilter userFilterForRecord) { var mapping = Mapping.TraceRecordAzureDataMap.Single(item => item.Type == oneRecord.GetType()); var azureFilterForCurrentRecord = string.Empty; // Calculate partition filter (if data type is static) if (mapping.PartitionDataType == PartitionDataType.StaticData) { var queryFilter = TableQuery.GenerateFilterCondition(WellKnownFields.PartitionKey, QueryComparisons.Equal, mapping.PartitionKeyDetail); azureFilterForCurrentRecord = string.IsNullOrEmpty(azureFilterForCurrentRecord) ? queryFilter : TableQuery.CombineFilters(azureFilterForCurrentRecord, TableOperators.And, queryFilter); } if (userFilterForRecord == null || !userFilterForRecord.Filters.Any()) { return(azureFilterForCurrentRecord); } // If Partition Filter data is dynamic, try to create partition filter. var userSpecifiedPropertyFilterForCurrentRecord = new List <PropertyFilter>(userFilterForRecord.Filters); if (mapping.PartitionDataType == PartitionDataType.PropertyName) { var userFilterForPartitionProperty = userSpecifiedPropertyFilterForCurrentRecord.SingleOrDefault(item => item.Name == mapping.PartitionKeyDetail); if (userFilterForPartitionProperty != null) { var queryFilter = CreateAzureTableQueryPropertyFilter(WellKnownFields.PartitionKey, userFilterForPartitionProperty.Value, QueryComparisons.Equal); azureFilterForCurrentRecord = string.IsNullOrEmpty(azureFilterForCurrentRecord) ? queryFilter : TableQuery.CombineFilters(azureFilterForCurrentRecord, TableOperators.And, queryFilter); userSpecifiedPropertyFilterForCurrentRecord.Remove(userFilterForPartitionProperty); } } // Now Create partition for rest of the property user may have specified. var azurePropertyFilterForCurrentRecord = string.Empty; foreach (var onePropertyFilter in userSpecifiedPropertyFilterForCurrentRecord) { var queryFilter = CreateAzureTableQueryPropertyFilter(onePropertyFilter); azurePropertyFilterForCurrentRecord = string.IsNullOrEmpty(azurePropertyFilterForCurrentRecord) ? queryFilter : TableQuery.CombineFilters(azurePropertyFilterForCurrentRecord, TableOperators.And, queryFilter); } // Add property filter. if (azurePropertyFilterForCurrentRecord != string.Empty) { azureFilterForCurrentRecord = azureFilterForCurrentRecord == string.Empty ? azurePropertyFilterForCurrentRecord : TableQuery.CombineFilters(azureFilterForCurrentRecord, TableOperators.And, azurePropertyFilterForCurrentRecord); } return(azureFilterForCurrentRecord); }
private ReadFilter(TraceRecordFilter filter) { this.TraceRecordFilters = new List <TraceRecordFilter> { filter }; }