Further to Jon's answer, the great thing about this is that you can
create queries at runtime - for instance, you can subfilter data:
if(someCondition) {
query = query.Where(x=>x.SomeProperty == 4);
}
and the subsequent SQL will adapt to suit with a WHERE clause.
Additionally, if you are just talking about IQueryable<T> (which the
compiler is, in essense) - then you don't actually know what the
backend is yet! In addition to the discussion of what the LINQ
provider is (LINQ-to-SQL, DbLinq, etc), there is also (within a single
provider) some variation depending on what the actual data-store is
(at runtime). For an example just talking about LINQ-to-SQL, the same
compiled code will use different SQL for "Skip" and "Take" depending
on whether it is using SQL Server 2000, or SQL Server 2005 (and
above), since the 2005 etc have CTE support ["ROW_NUMBER() OVER (ORDER
BY ...) AS ..."], where-as 2000 can only use TOP and nested
sub-queries.
Marc