Ogólny predykat zapytania LINQ?

Nie jestem pewien, czy jest to możliwe, czy też wyrażam poprawnie to, czego szukam, ale mam wielokrotnie następujący kod w mojej bibliotece i chciałbym ćwiczyć trochę DRY. Mam zestaw tabel SQL Server, które sprawdzam na podstawie prostego pola wyszukiwania dostarczonego przez użytkownika ala Google. Używam LINQ do tworzenia ostatecznego zapytania na podstawie tego, co znajduje się w ciągu wyszukiwania. Szukam sposobu użycia generycznych i przekazanych w funkcjach lambda, aby stworzyć z tego procedurę wielokrotnego użytku:

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));
        }
    }
}

Miałem nadzieję stworzyć ogólną metodę z podpisem wyglądającą jak:

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

Używam tej samej strategii wyszukiwania we wszystkich moich tabelach, więc jedyne, co naprawdę różni się od użycia, to przeszukanie MyTable i MyTableEntity i przeszukanie nazwy pola. Czy to ma sens? Czy istnieje sposób, aby LINQ dynamicznie przekazywał nazwę pola do zapytania w klauzuli where? Czy mogę przekazać to jako predykat lambda?

e => e.FieldName.Contains(queryTerm)

Zdaję sobie sprawę z tego, że jest półtora miliona sposobów na zrobienie tego w SQL, prawdopodobnie łatwiej, ale chciałbym zachować wszystko w rodzinie LINQ dla tego. Ponadto uważam, że generics powinny być przydatne w przypadku takiego problemu. Jakieś pomysły?

questionAnswers(4)

yourAnswerToTheQuestion