private async Task FilterBy(ICollectionView <object> collectionView, string query) { var itemType = collectionView.GetItemType(); var queryParts = TreatSpacesAsAndOperator ? query.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) : new string[] { query }; FilterExpression filterExpression = null; foreach (var queryPart in queryParts) { var filterExpressions = new List <FilterExpression>(); foreach (var property in CollectionView.GetItemType().GetTypeInfo().DeclaredProperties) { try { var propType = property.PropertyType; if (propType == typeof(string) || IsNumeric(propType) && MatchNumbers) { filterExpressions.Add(new FilterUnaryExpression(property.Name, FilterOperation.Contains, queryPart)); } } catch { } } var fe = FilterExpression.Combine(FilterCombination.Or, filterExpressions.ToArray()); if (filterExpression == null) { filterExpression = fe; } else { filterExpression = new FilterBinaryExpression(FilterCombination.And, filterExpression, fe); } } await(collectionView as ISupportFiltering).FilterAsync(filterExpression); }