public CardDataStore.CardsQuery CreateQuery(IEnumerable <Card> domain = null) { CardDataStore.CardsQuery query = new CardDataStore.CardsQuery(Connector, domain); foreach (object item in Items) { if (item is SearchCriteria criteria) { string field = criteria.Field.Replace(" ", ""); PropertyInfo property = typeof(Card).GetProperty(field); if (property.PropertyType == typeof(bool)) { query.Where(criteria.Field, criteria.Set); } else if (criteria.Operation == "Exists") { query.Where(criteria.Field, criteria.Operation, criteria.Set.ToString()); } else if (criteria.Operation == "Contains" && property.PropertyType == typeof(string) && field.Contains("Color")) { query.Where(criteria.Field, criteria.Operation, criteria.Color); } else { query.Where(criteria.Field, criteria.Operation, criteria.Value); } } if (item is SearchViewModel model) { CardDataStore.CardsQuery query2 = model.CreateQuery(domain); query.Where(query2); } } if (Negated) { query.Negate(); } return(query); }
async void Search(object sender, EventArgs e) { CardDataStore.CardsQuery query = RootGroup.GetQuery(); await Navigation.PushAsync(new CardsListPage(query.ToDataStore())); }