Agree that this is a problem. I think it helps to consider LinqToSql a data mapper (like IBatis, without the xml), from which you can quickly and easily generate type safe queries from a database. I thus have my own shapes defined in a domain library, and map these from LinqToSql (you can do the mapping inline with the LINQ, which allows you to take full advantage of deferred execution and other IQueryable goodness). Shout if I need to elaborate more on this.
Even though some might consider this duplication, it's a lot quicker and better than rolling your own. You also get a layer away from your database, which can be appropriate if your domain doesn't look like a relational store. When updating, though, you need to tranverse object graphs yourself, but if the alternative is rolling your own you're probably still better off.
My dislikes of it are having to extend partial classes (and partial methods) for customisation, lack of acceptable many to many support, and the database first approach (especially without effective updating - changing your schema hurts at times). These are all manageable, though, just depends on the project. (I currently use LinqToSql in a small side project or two, but generally use NHibernate.)
Also re the projection, can't you map the anon type to something typed? Not sure what you need the attibutes for, but that's still an option.
GilaMonster, can you please elaborate on the procedure cache, or point me to a reference?
The high road might seem longer at first, but you'll enjoy the downhill at the end...
http://blog.benhartonline.com/