Old thread, but I wanted to add the following to the conversation.
When doing this, if I did not map the ColumnName property, then when I tried to retrieve the field it through a database error. My complex name (TestThisObjectId) mapped to Test_this_object_Id in the database and it had trouble resolving.
Also, a code example for querying against the user profiles that worked for me. Trying to query against GetProfiles<>() with a standard LINQ FirstOrDefault/Where caused a database exception, so hopefully this technique helps.
var profileManager = UserProfilesHelper.GetUserProfileManager<SitefinityProfile>();
var profiles = SitefinityQuery.Get<UserProfile>(
var apps = profiles.Where(p => p.ApplicationName == profileManager.Provider.ApplicationName);
var profile = apps.FirstOrDefault(x => x.GetValue<