Когда вы пишете что-то вроде этого:
var q = from d in Data.Table
where d.Name == "SomeName"
select d
Превращается в дерево выражений. Когда вы используете этот запрос linq против SQL, нижележащий Linq-to-SQL использует это дерево для выполнения высокопроизводительного SQL-запроса.
Так что он используется «за кулисами», когда вы занимаетесь linq.
Вы можете создавать свои собственные деревья выражений. Это может быть очень полезно, если вы хотите делать динамические запросы. Это может быть другой вид критериев поиска. Вы даже можете использовать его для создания нескольких внутренних объединений с предложениями where и другими интересными вещами, даже не зная, какие типы вы используете заранее. Это требует некоторого размышления.