I have a list of objects which I want to pass this list through a set of filters, the very important thing here I want to mention is the filtred set from the first filter will be the input set of the second till the last filter.

Here is my filter Function signature:

`IEnumerable<string> Filter(IEnumerable<string> data);`

I did it with for loop, so I want a result similar to this foreach loop using, but I want to do it in a more declarative way with LINQ:

```
var filtersList = GetFilteres();
var filteredData = data;
foreach (var filter in filtersList)
{
    filteredData = filter(filteredData);
}

```

NB: the filtered list is unknown at compile time. it will be populated at runtime.

Example:
Let's assume we have two filter functions, we get those functions at the startup of my application by reading the `app.config` file.

Filter 01 predicate : `x => x > 1 && x < 3`

Filter 02 predicate: `x => x > 2 < 10`

Data: a list of integers: `[0,1,2,4,5,6,7]`

After passing this list to the first filter the output will be:
`[0,1,2]`

this output set will be the input of the second filter, So after applying the second filter the outputs will be `[0,1]`