Each user profile contains a single user id, username, first name, etc. so the model should look like this:
public class UserProfileIndexViewModel
{
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string ClientName { get; set; }
}
And your controller action should look like this:
var users = db.UserProfiles;
var viewModel = new List<UserProfileIndexViewModel>();
foreach (var user in users)
{
ProfileBase _userProfile = ProfileBase.Create(user.UserName);
viewModel.Add(new UserProfileIndexViewModel {
UserId = user.UserId,
FirstName = Convert.ToString(_userProfile.GetPropertyValue("FirstName")),
LastName = Convert.ToString(_userProfile.GetPropertyValue("LastName")),
Email = db.User_Contacts.Find(user.UserName).Contact.Email,
ClientName = db.User_Clients.Find(user.UserName).Client.Name
});
}
return View(viewModel);
And then your view should would pretty much as it is now.