LINQtoSQL is GREAT, however we often need to perform dynamic queries, which is not directly supported by LINQ – however if we use the capability of LINQ to do query composition and deferred execution we can perform most of the ‘dynamic’ queries we need (without having to use the PredicateBuilder).
Take a look at this article which shows how to do “dynamic” LINQ to SQL queries just be using query composition and deferred execution:
http://blogs.msdn.com/swiss_dpe_team/archive/2008/06/05/composable-linq-to-sql-query-with-dynamic-orderby.aspx
If you like LinqDataSource (and the benefits it provide, e.g. automatic handling of sort etc.), but would like it to behave a bit more “dynamic”, you should take a look at the “Selecting” event. Scott Gu has an excellent article about just that – Enjoy! :-)