Generisches LINQ-Abfrageprädikat?

Ich bin mir nicht sicher, ob dies möglich ist oder ob ich richtig ausdrücke, wonach ich suche, aber ich habe den folgenden Code wiederholt in meiner Bibliothek und möchte ein wenig DRY üben. Ich habe eine Reihe von SQL Server-Tabellen erstellt, die ich basierend auf einem einfachen benutzerdefinierten Suchfeld von Google abfrage. Ich verwende LINQ, um die endgültige Abfrage basierend auf dem Inhalt der Suchzeichenfolge zu erstellen. Ich suche nach einer Möglichkeit, Generika zu verwenden, und übergebene Lambda-Funktionen, um daraus eine wiederverwendbare Routine zu erstellen:

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

Ich hatte gehofft, eine generische Methode mit Signatur zu erstellen, die ungefähr so ​​aussieht:

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

Ich verwende dieselbe Suchstrategie für alle meine Tabellen. Das einzige, was sich von Verwendung zu Verwendung wirklich unterscheidet, ist die Suche nach "MyTable & MyTableEntity" und "FieldName". Macht das Sinn? Gibt es mit LINQ eine Möglichkeit, den Namen des Feldes, das in der where-Klausel abgefragt werden soll, dynamisch zu übergeben? Oder kann ich dies als Prädikat Lambda übergeben?

e => e.FieldName.Contains(queryTerm)

Mir ist klar, dass es eineinhalb Millionen Möglichkeiten gibt, dies in SQL zu tun, wahrscheinlich einfacher, aber ich würde gerne alles in der LINQ-Familie für diese behalten. Ich bin auch der Meinung, dass Generika für ein Problem wie dieses nützlich sein sollten. Irgendwelche Ideen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage