I'm almost done with converting the SqlServer DQE to use the DbProviderFactories so it can be used with sqlserver 7, 2000, 2005, 2008, CE Desktop 3.x and CE Desktop 3.5, so CE Desktop users don't have to re-generate with different templates, it's just a setting in the config file.
That's the good news.
The bad news is that SqlServer CE Desktop is incredibly lame. Especially 3.1/3.0, which don't support derived tables at all, so you won't be able to run much linq queries on them. 3.5 is a little bit better but still a lot of our tests fail because it doesn't allow a nested scalar query anywhere, it only allows nested SELECT statements in the FROM clause.
So, for everyone looking for using linq with sqlserver ce desktop, it's not us who dropped the ball here, Microsoft thought it was more efficient to release a CE Desktop engine which is too crippled (I mean, MS Access has more features!) and IMHO for no reason at all.
ANyway, if you avoid scalar queries you're fine on sqlserver CE 3.5 desktop, however with linq you'll never know what the query ends up in. This makes multi-db code pretty error prone, as it breaks, IF it breaks, at runtime, not at compile time.
As these nested selects are part of the query to execute, we can't rewrite them into something else, so if you run into this problem, there's little you can do (perhaps switch to ms access
).