Predicado genérico de consulta LINQ?

Não tenho certeza se isso é possível ou se estou expressando corretamente o que estou procurando, mas tenho o seguinte trecho de código na minha biblioteca repetidamente e gostaria de praticar um pouco de DRY. Tenho um conjunto de tabelas do SQL Server que estou consultando com base em um campo de pesquisa simples fornecido pelo usuário, o Google. Estou usando o LINQ para compor a consulta final com base no que está na string de pesquisa. Eu estou procurando uma maneira de usar genéricos e passou em funções lambda para criar uma rotina reutilizável fora deste:

string[] arrayOfQueryTerms = getsTheArray();

var somequery = from q in dataContext.MyTable
                select q;

if (arrayOfQueryTerms.Length == 1)
{
    somequery = somequery.Where<MyTableEntity>(
        e => e.FieldName.StartsWith(arrayOfQueryTerms[0]));
}
else
{
    foreach(string queryTerm in arrayOfQueryTerms)
    {
        if (!String.IsNullOrEmpty(queryTerm))
        {
            somequery = somequery 
                        .Where<MyTableEntity>(
                            e => e.FieldName.Contains(queryTerm));
        }
    }
}

Eu estava esperando para criar um método genérico com assinatura que se parece com algo como:

private IQueryable<T> getQuery(
    T MyTableEntity, string[] arrayOfQueryTerms, Func<T, bool> predicate)

Eu estou usando a mesma estratégia de busca em todas as minhas tabelas, então a única coisa que realmente difere do uso para o uso é o MyTable & MyTableEntity pesquisado e o FieldName pesquisado. Isso faz sentido? Existe uma maneira com LINQ dinamicamente passar o nome do campo para consultar na cláusula where? Ou posso passar isso como um predicado lambda?

e => e.FieldName.Contains(queryTerm)

Eu percebo que há um milhão e meio de fazer isso no SQL, provavelmente mais fácil, mas eu adoraria manter tudo na família LINQ para este. Além disso, acho que os genéricos devem ser úteis para um problema como esse. Alguma ideia?

questionAnswers(4)

yourAnswerToTheQuestion