Деревья выражений полезны, когда вам нужен доступ к логике функции, чтобы каким-либо образом изменить или применить ее.
Хорошим примером является Linq to SQL:
//a linq to sql statement
var recs (
from rec in LinqDataContext.Table
where rec.IntField > 5
select rec );
Если бы у нас не было деревьев выражений, этот оператор должен был бы вернуть все записи, а затем применить логику C # where для каждой.
С деревьями выражений, которые where rec.IntField > 5
могут быть проанализированы в SQL:
--SQL statment executed
select *
from [table]
where [table].[IntField] > 5