Using Expression<T> you are explicitly creating an expression tree – this means that you can deal with the code that makes up the query as if it were data.
The reason for this is that LINQ providers (like LINQ to SQL for example) inspect the query itself to determine the best way to translate the C# expressions into a T-SQL query. Since an expression tree lets you look at the code as data the provider is able to do this.