static void Main() { var listOwners = new List <Owner> { new Owner("OneO"), new Owner("TwoO") }; var list = new List <Bitch> { new Bitch("One", listOwners[0]), new Bitch("One", listOwners[1]), new Bitch("One", listOwners[0]), new Bitch("Two", listOwners[0]), new Bitch("Three", listOwners[1]) }; var filter = new TypeFilter($"Name = \"One\"", new Dictionary <string, TypeFilter> { { nameof(Bitch.Owner), new TypeFilter("NameOwner = \"OneO\"") } }); var sortedList = new SortableBindingList <Bitch>(list); var mainFilter = new TypeFilter("", new Dictionary <string, TypeFilter> { { "Bitch", filter } }); //sortedList.ApplyFilter(filter); //var t = (Func<MainBitch, bool>)PropertiesFilter.TypeValidatorExpression(typeof(MainBitch), new Dictionary<string, TypeFilter>{{"Bitch", filter}}).Compile(); var t = PropertiesFilter.CreateFilter <MainBitch>(mainFilter); var p = t(new MainBitch { Bitch = list[1] }); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new CarsView()); }
private void CreateInnerFilter(PropertyValidate propertyInfo, KvP property) { var filter = new PropertiesFilter(propertyInfo.PropertyType); switch (new FilterEditor(filter).ShowDialog()) { case DialogResult.OK: property.Value = filter; bsFilters.ResetCurrentItem(); break; case DialogResult.Cancel: break; case DialogResult.Abort: property.Value = null; bsFilters.ResetCurrentItem(); break; } }
public static TypeFilter ParsFilter(PropertiesFilter filters) { var result = new TypeFilter(new Dictionary <string, TypeFilter>(filters.Count)); foreach (var filter in filters.Values.Where(f => f.Value != null)) { switch (filter.Value) { case PropertiesFilter innerFilter: result.PropertyFilters.Add(filter.Key.Name, ParsFilter(innerFilter)); break; case Delegate predecate: result.PropertyFilters.Add(filter.Key.Name, new TypeFilter(predecate)); break; default: result.PropertyFilters.Add(filter.Key.Name, new TypeFilter(filter.Value.ToString())); break; } } return(result.PropertyFilters.Count > 0 ? result : null); }
public FilterEditor(PropertiesFilter filters) { _filters = filters ?? throw new ArgumentNullException(nameof(filters)); InitializeComponent(); }