A consulta Linq incorporada no loop foreach sempre leva o valor do parâmetro da última iteração

Eu tenho uma lista contendo várias palavras-chave. Eu foreach através deles construindo minha consulta linq com eles da seguinte forma (resumidos para remover o ruído do código):

List<string> keys = FillKeys()
foreach (string key in keys){
    q = q.Where(c => c.Company.Name.Contains(key));
}

Quando agora faço minhas chaves conterem 2 chaves que retornam resultados separadamente, mas nunca podem ocorrer juntas (todo item em q é "xyz" ou "123", nunca "123" AND "xyz"), ainda recebo resultados. O conjunto de resultados é o mesmo que a última sequência que chegou.

Eu dei uma olhada na consulta linq e parece que ela cria o sql correto, mas substitui @ p1 AND @ p2, ambos pelo mesmo valor (última iteração).

O que estou fazendo errado?

questionAnswers(3)

yourAnswerToTheQuestion