Ejecutando una simple consulta LINQ en paralelo

Todavía soy muy nuevo en LINQ y PLINQ. Generalmente solo uso loops yList.BinarySearch en muchos casos, pero estoy tratando de salir de esa mentalidad donde puedo.

public class Staff
{
  // ...
  public bool Matches(string searchString)
  {
    // ...
  }
}

Usando LINQ "normal", lo siento, no estoy familiarizado con la terminología, puedo hacer lo siguiente:

var matchedStaff = from s
                     in allStaff
                  where s.Matches(searchString)
                 select s;

Pero me gustaría hacer esto en paralelo:

var matchedStaff = allStaff.AsParallel().Select(s => s.Matches(searchString));

Cuando compruebo el tipo dematchedStaff, es una lista debools, que no es lo que quiero.

En primer lugar, ¿qué hago mal aquí y, en segundo lugar, cómo devuelvo unList<Staff> de esta consulta?

public List<Staff> Search(string searchString)
{
  return allStaff.AsParallel().Select(/* something */).AsEnumerable();
}

devolucionesIEnumerable<type>noList<type>.

Respuestas a la pregunta(2)

Su respuesta a la pregunta