Yes, you're right, there are problems with the default implementation of Profiles, querying being one of them.
All data is stored as a long string, with another column indicating where each Profile property starts and end. So:
can be stored to indicate I have a first and last name of Imar and Spaanjaars and that I live in the Netherlands.
This indeed is very difficult to query for code outside the Profile feature, especially in JOIN queries. Finding everyone from the Netherlands with a first name of Imar is then pretty hard.
But, pluggable providers to the rescue: http://www.asp.net/sandbox/samp_profiles.aspx?tabid=62
The download contains two additional providers: one that uses a custom table with columns you can map to Profile properties, while the other allows you to do the same with stored procedure parameters.
This way, you get the benefits of rapid development with Profiles, while you still have a flexible and accessible data structure.
Everyone is unique, except for me.
Author of ASP.NET 2.0 Instant Results
and Beginning Dreamweaver MX / MX 2004
Want to be my colleague? Then check out this post