У меня есть коллекция объектов MyClass, и мне нужно отфильтровать ее комбинацией из 17 полей.Фильтр большой коллекции
Я реализовал объект MyClassFilter с 17 возможных полей и условия для каждого из них и метод:
bool PassFilter(MyClass ObjectToEvaluate)
{
return PassFilterVal(this.Workstream, ObjectToEvaluate.WorkStream)
&& PassFilterVal(this.AssignedTo, ObjectToEvaluate.AssignedTo)
&& PassFilterVal(this.ProcessingGroup, ObjectToEvaluate.ProcessingGroup)
&& PassFilterVal(this.ScheduledStart, ObjectToEvaluate.ScheduledStart)
&& PassFilterVal(this.EntityName, ObjectToEvaluate.EntityName)
&& PassFilterVal(this.TaskIDs, ObjectToEvaluate.TaskID)
&& PassFilterVal(this.ElementIDs, ObjectToEvaluate.EntityID)
&& PassFilterVal(this.MappingIDs, ObjectToEvaluate.MappingID)
&& PassFilterVal(this.EntityStatus, ObjectToEvaluate.EntityStatus)
&& PassFilterVal(this.EntityType, ObjectToEvaluate.EntityType)
&& PassFilterVal(this.NumberOfSteps, ObjectToEvaluate.ListOfSteps.Count)
&& PassFilterVal(this.NumberOfDependancies, ObjectToEvaluate.ListOfParentDependancies.Count)
&& PassFilterVal(this.NumberOfOpenIssues, ObjectToEvaluate.ListOfAllIssues.CountOpen)
&& PassFilterVal(this.NumberOfRequirementsLinked, ObjectToEvaluate.RequierementsLinked)
;
}
и моя коллекция имеет метод
ListOfMyClass FilterList(MyClassFilter Filter){
ListOfMyClass FilteredList = new ListOfMyClass();
foreach (MyClass Task in this)
{
if (Filter.TaskPassFilter(Task))
FilteredList.Add(Task);
}
return FilteredList;
}
Он отлично работает до тех пор, коллекция небольшая, но когда у меня есть 500 объектов, она начинает очень медленно. Я искал сеть, но все примеры собираются объектом по объекту в коллекции и запрашивают поле, если оно прошло или нет.
Любые предложения по улучшению производительности?
Thanks
Вы должны добавить тег для языка, который вы используете ... – sth