Other than using profiler, is there a way to view the sql that linq-to-sql produces?
You can use the Log property on the DataContext to write out what the SQL is. This takes a TextWriter and is pretty easy to use. If you need an example I can provide you one.
DataContext Log
I used LinqPad today to help debug a Linq2Sql issue. It's a neat little tool, and will show you the SQL you're generating also.
http://www.linqpad.net/
Your Linq-to-Sql query will be stored in a variable. You can hover over this variable to inspect it and it will show you the generated SQL.
Another method is to output it using the following code:
Console.WriteLine(dbContext.GetCommand(yourQuery).CommandText);
And of course Profiler which you already know about.