Consider this code:
static void Main(string[] args)
{
var persons = new List<Person>
{
new Person("Name1", "Surname1", 30),
new Person("Name2", "Surname2", 20),
new Person("Name3", "Surname3", 10)
};
var filters = new List<Func<Person, bool>>
{
p => p.Age > 10,
p => p.Surname.Contains("2")
};
var personsFiltered = new List<Person>(persons);
foreach (var filter in filters)
{
personsFiltered = personsFiltered.Where(filter).ToList();
}
foreach (var person in personsFiltered)
{
Console.WriteLine(person);
}
Console.ReadKey();
}
}
class Person
{
public string Name { get; private set; }
public string Surname { get; private set; }
public int Age { get; private set; }
public Person(string name, string surname, int age)
{
Name = name;
Surname = surname;
Age = age;
}
public override string ToString()
{
return String.Format("Name:{0}, Surname:{1}, Age:{2}", Name, Surname, Age);
}
}
Is it possible to pass filters as string parameters, so that the user could create custom filters? For example, the filters
list in my example would initially be empty and the user would provide strings "p => p.Age > 10" and "p => p.Surname.Contains(\"2")"?