Вам потребуется либо использовать второй параметр метода Intersect, чтобы указать свой собственный IEqualityComparer, либо вы можете попробовать это. Это выглядит довольно забавно, но это имеет смысл, когда вы освоитесь.
If CurrentPage.Roles.Any(Function(Role) Role.Users.Any(Function(User) User.Id = CurrentUser.Id)) Then
'User has role
End If
Хотя это может не сработать, если вам приходится загружать пользователей на каждой итерации. Если вы загружаете из EntityFramework, я бы порекомендовал вам загружать их примерно так:
CurrentPage.Roles.Include ( "Пользователи"). Любой (...
Или я также создал свое собственное расширение EnsureLoaded (), которое возвращает объект примерно так:
If CurrentPage.Roles.Any(Function(a) a.Users.EnsureLoaded().Any(Function(b) b.Id = CurrentUser.Id)) Then
Но если вы нажимаете db на каждом запросе страницы, убедитесь, что вы проверили профилировщик и убедитесь, что выполняете только один запрос, а не один запрос для каждой роли.