Please help… with this error:
Unable to create a map expression from UserGroups.Groups
(HMDS.Web.Models.Groups) to IQueryable1.groups (System.Linq.IQueryable
1[HMDS.Web.Models.Groups])
Code ——
UserGroupsController – Edit Action:
var form = await context.UserGroups.Where(ug => ug.UserId == userId).Where(ug => ug.Role == role)
.Include(u => u.User)
.ProjectTo<UserGroupForm>(mapper.ConfigurationProvider)
.FirstOrDefaultAsync();
if (form == null)
{
return NotFound();
}
return View(form.Build(Groups));
UserGroupsForm – View Model
public class UserGroupForm
{
public UserGroupForm()
{
}
public UserGroupForm(
IQueryable<Groups> groups) => Build(groups);
public static IEnumerable<string> GroupRoles =>
new[] { Models.UserGroups.Manager, Models.UserGroups.Reader };
public string UserId { get; set; }
public string GroupsId { get; set; }
public string UserName { get; set; }
public IEnumerable<int> GroupIds { get; set; }
public MultiSelectList GroupSelection { get; private set; }
public string Role { get; set; }
public IEnumerable<UserGroups> UserGroups =>
GroupIds.OrEmpty()
.Select(gId => new UserGroups { GroupsId = gId, UserId = UserId, Role = Role})
.ToList();
public UserGroupForm Build(
IQueryable<Groups> groups)
{
GroupSelection = new MultiSelectList(
groups,
nameof(Groups.Id),
nameof(Groups.Name),
GroupIds);
return this;
}
}
User – Model:
public ICollection<UserGroups> AssignedGroups { get; set; }
UserGroups – Model:
public class UserGroups
{
public const string Manager = "Manager";
public const string Reader = "Reader";
public static readonly string[] GroupUserRoles = { Manager, Reader };
public User User { get; set; }
[Key]
public string UserId { get; set; }
public Groups Groups { get; set; }
[Key]
public int GroupsId { get; set; }
public string Role { get; set; }
}
AutoMapper – Mapping:
CreateMap<UserGroups, UserGroupForm>()
.ForMember(
dest => dest.GroupIds,
opt => opt.MapFrom(src => src.User.AssignedGroups.Select(g => g.GroupsId)))
//.ForMember(
// dest => dest.GroupIds,
// opt => opt.MapFrom(src => src.User.AssignedGroups.Select(ug => ug.Groups.Id)))
.ForMember(dest => dest.Role, opt => opt.MapFrom(src => src.Role))
//.ForMember(dest => dest.GroupSelection, opt => opt.Ignore())
.ReverseMap();
Please let me know if I am missing something or You need more, thanks.