public void PerformFiltering() { if (_filter == null) { _filter = ""; } //If _filter has a value (ie. user entered something in Filter textbox) //Lower-case and trim string var lowerCaseFilter = Filter.ToLowerInvariant().Trim(); //Use LINQ query to get all personmodel names that match filter text, as a list var result = AllBugs.Where(n => n.name.ToLowerInvariant() .Contains(lowerCaseFilter)) .ToList(); //Get list of values in current filtered list that we want to remove //(ie. don't meet new filter criteria) var toRemove = Bugs.Except(result).ToList(); //Loop to remove items that fail filter foreach (var note in toRemove) { Bugs.Remove(note); } var resultCount = result.Count; // Add back in correct order. for (int i = 0; i < resultCount; i++) { var resultItem = result[i]; if (i + 1 > Bugs.Count || !Bugs[i].Equals(resultItem)) { Bugs.Insert(i, resultItem); } } }