Lista de ordenamiento usando la reflexión

Tengo una tabla y quiero hacer una función de clasificación para cada columna.

La clasificación tiene dos direcciones asc y desc.

1) ¿Cómo puedo ordenar columnas usando la reflexión?

List<Person> GetSortedList(List<Person> persons, string direction, string column)
{
    return persons.OrderBy(x => GetProperyByName(x, column)); //GetPropertyByName - ??
}

2) También quiero hacer algo que puedo llamar operadores de cadena de linq:

 List<Person> GetSortedList(List<Person> persons, string direction, string column)
    {
         var linqChain;

         if(direction=="up")
         {
             linqChain+=persons.OrderBy(x => GetProperyByName(x, column))
         }
         else
         {
             linqChain+=persons.OrderByDescending(x => GetProperyByName(x, column))
         }

         linqChain+=.Where(....);

         return linqChain.Execute();

    }

Respuestas a la pregunta(3)

Su respuesta a la pregunta