Dinâmico Onde para Lista <T>

Estou tentando criar um filtro dinâmico para várias classes. Nós saberíamos apenas em tempo de execução com que tipo estamos lidando. Preciso que o ColumnName seja a coluna real (não um valor de string).

Existe uma maneira fácil de converter a string em uma coluna?

public static List<T> Filter<T>
    (this List<T> Source, string ColumnName, 
    string TypeOfCompare, string CompValue)
{
    IQueryable<T> matches = Source.AsQueryable();

    if (ColumnName.Length > 0)
    {
        matches = (IEnumerable)matches.Where(a => ColumnName == CompValue)
    }

    List<T> ReturnList2 = new List<T>();
    ReturnList2 = matches.ToList();
    return ReturnList2;
}

questionAnswers(3)

yourAnswerToTheQuestion