Beispiel für die Verwendung (das allerdings sinnfrei ist):
// Daten: IEnumerable<int> list = Enumerable.Range(0, 10);
// Prädikat 1. Abfrage: Expression<Func<int, bool>> even = i => i % 2 == 0;
// Prädikat 2. Abfrage: Expression<Func<int, bool>> odd = i => i % 2 != 0;
// Prädikat zusammengesetzt mit OR: Expression<Func<int, bool>> all = even.Or(odd);
// Abfrage: var query = list.Where(all.Compile());
Hintergrund: Ein Lambdausdruck kann als Expression-Tree dargestellt werden. Dieser Expression-Tree wird mit den Erweiterungsmethoden des Predicatbuilder verändert so dass die Abfragen "dynamisch" verknüpft werden könne. Für LINQ to SQL oder LINQ in Verwendung mit dem ADO.net Entity Framework muss für Abfragen eine Expression übergeben werden. Diese wird zur Laufzeit dann ausgewertet und nach T-SQL übersetzt. Bei Verwendung von LINQ to Objects wird eine Delegat erwartet und daher muss die Expression kompiliert werden (wie im Beispiel gezeigt).