Połącz wiele predykatów

Czy istnieje c # .NET 2.0! połączyć wiele predykatów?

Powiedzmy, że mam następujący kod.

List<string> names = new List<string>();
names.Add("Jacob");
names.Add("Emma");
names.Add("Michael");
names.Add("Isabella");
names.Add("Ethan");
names.Add("Emily");

List<string> filteredNames = names.FindAll(StartsWithE);

static bool StartsWithE(string s)
{
    if (s.StartsWith("E"))
    {
        return true;
    }
    else
    {
        return false;
    }
}

To daje mi:

Emma
Ethan
Emily

Więc to jest całkiem fajne, ale wiem, że chcę mieć możliwość filtrowania przy użyciu wielu predykatów.

Chcę więc móc powiedzieć coś takiego:

List<string> filteredNames = names.FindAll(StartsWithE OR StartsWithI);

Żeby dostać:

Emma
Isabella
Ethan
Emily

Jak mogę to osiągnąć? Obecnie filtruję całą listę dwa razy i łączę wyniki później. Ale niestety jest to dość nieefektywne i co ważniejsze, tracę oryginalny porządek sortowania, co w mojej sytuacji jest nie do przyjęcia.

Muszę też być w stanie iterować po dowolnej liczbie filtrów / predykatów, ponieważ może być ich sporo.

Ponownie musi to być rozwiązanie .NET 2.0, niestety nie mogę użyć nowszej wersji frameworka

Wielkie dzięki.

questionAnswers(7)

yourAnswerToTheQuestion