láusula @Dynamic WHERE no LINQ

Qual é a melhor maneira de montar uma cláusula WHERE dinâmica em uma instrução LINQ?

Tenho várias dezenas de caixas de seleção em um formulário e as estou retornando como: Dictionary <string, List <string>> (Dicionário <fieldName, List <values>>) para minha consulta LINQ.

public IOrderedQueryable<ProductDetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string,List<string>> filterDictionary)
{
    var q = from c in db.ProductDetail
            where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName
            // insert dynamic filter here
            orderby c.ProductTypeName
            select c;
    return q;
}

questionAnswers(10)

yourAnswerToTheQuestion