The structure of my classes and repository:
public class Group{
//fields
}
public class User{
public UserRole Role {get;set;}
}
public abstract class UserRole{
//fields
}
public class PersonUserRole:UserRole{
public Group Group {get;set;}
}
public class ManagerUserRole:UserRole{
public IList<Group> Groups {get;set;}
}
An example where I encounter the issue:
public class UserRepository:IUserRepository{
private readonly ApplicationDbContext _dbContext;
private readonly DbSet<User> _users;
public UserRepository(ApplicationDbContext dbcontext)
{
_dbContext = dbcontext;
_users = _dbContext.DomainUsers;
}
public User GetBy(int id)
{
User type = _users.Include(u => u.Role)
.SingleOrDefault(c => c.UserId == id);
if (typeof(PersonUserRole) == type.Role.GetType())
{
return
_users.Include(u => u.Role)
.ThenInclude(r => (r as PersonUserRole).Groep)
.SingleOrDefault(c => c.UserId == id);
}
else
{
return _users.Include(u => u.Role)
.ThenInclude(r => (r as ManagerUserRole).Groups)
.SingleOrDefault(c => c.UserId == id);
}
}
}
I get the following error message:
Message "The property expression 'r => (r As PersonUserRole).Group' is not valid. The expression should represent a property access: 't => t.MyProperty'
It seems like I cannot cast my UserRole Type to the actual PersonUserRole Type to include the Group/Groups property. How can I include the properties of the subclasses?