private static FiltersDefinition ShuffleSimpleRandomFiltersCombination(Mission mission, Dictionary <string, DataCollectionDefinition> collections, string FilterSetkey, Func <ItemNumberRange, string> rangeReformatter = null, int limit = 3) { FiltersDefinition _filtersDefinition = new FiltersDefinition(FilterSetkey); var collection = collections.ToArray()[rnd.Next(0, collections.Count())].Value; _filtersDefinition.AddFilters(collection.Parameters, mission); // _filtersDefinition.AddFilter("missionName", "{http://a9.com/-/opensearch/extensions/eo/1.0/}platform", mission.MissionName.Value, mission.MissionName.Label, mission.MissionName.Validator, null); IEnumerable <System.Reflection.PropertyInfo> props = mission.GetType().GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(SimpleChoiceAttribute))); foreach (var prop in props) { if (_filtersDefinition.GetFilters().Count() >= limit) { continue; } if (rnd.Next() % 2 == 0) { continue; } var choice = prop.GetValue(mission); if (choice == null) { continue; } if (_filtersDefinition.Filters.Any(fd => fd.FullName == ((IMissionFilter)choice).FullName)) { continue; } if (choice is StringListChoice) { var sl = choice as StringListChoice; var value = sl.LabelStrings.ToArray()[rnd.Next(0, sl.LabelStrings.Count())]; _filtersDefinition.AddFilter(sl.Key, sl.FullName, value.Value, value.Label, value.Validator, null); } if (choice is ItemNumberRange) { var nb = choice as ItemNumberRange; int randomMin = rnd.Next((int)(nb.Min / nb.Step), (int)(nb.Max / nb.Step)); decimal min = new decimal(randomMin * nb.Step); int randomMax = rnd.Next((int)((int)min / nb.Step), (int)(nb.Max / nb.Step)); decimal max = new decimal(randomMax * nb.Step); var value = new double[2] { (double)min, (double)max }; var formatter = nb.Formatter; if (rangeReformatter != null) { formatter = rangeReformatter.Invoke(nb); } Func <IOpenSearchResultItem, bool> ivalidator = null; if (nb.ItemValueValidator != null) { ivalidator = nb.ItemValueValidator.Invoke(value); } Func <IOpenSearchResultCollection, bool> cvalidator = null; if (nb.ResultsValidator != null) { cvalidator = nb.ResultsValidator.Invoke(value); } _filtersDefinition.AddFilter(nb.Key, nb.FullName, string.Format(formatter, value.Cast <object>().ToArray()), string.Format("{0} {1}", nb.Label, string.Format(formatter, value.Cast <object>().ToArray())), ivalidator, cvalidator); } } return(_filtersDefinition); }