Генерация видовых моделей с помощью LINQ - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть два списка

user.Roles
repository.Roles

и RoleViewModel

public class RoleViewModel
{
    public int RoleID { get; set; }
    public bool InRole { get; set; }
    public string Name { get; set; }

    public RoleViewModel() { }

    public RoleViewModel(Role role,bool inRole)
    {
        this.RoleID = role.RoleID;
        this.Name = role.Name;
        this.InRole = inRole;
    }
}

Мне нужно создать любую коллекцию, например List<RoleViewModel>, которая будет представлять собой композицию элементов RoleViewModel с полем inRole, установленным в значение true. И все другие возможные роли, которые размещены в коллекции repository.Roles и будут преобразованы в RoleViewModels.

Могу ли я использовать linq для создания необходимого списка?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Похоже, что вам нужна модель представления для каждой роли в хранилище, и если пользователь в этой роли, аргумент inRole будет иметь значение true. Пожалуйста, поправьте меня, если я ошибаюсь.

Для этого вам нужно левое соединение ролей репозитория с ролями пользователя:

from role in repository.Roles
join userRole in user.Roles on role.RoleID equals userRole.RoleID into userRoles
from userRole in userRoles.DefaultIfEmpty()
select new RoleViewModel(role, userRole != null)

Это объединяет набор ролей в репозитории с набором ролей для пользователя. Он помещает соответствующие роли пользователя в последовательность userRoles, а затем использует DefaultIfEmpty, чтобы возвратить ноль для userRole, если пользователь не находится в роли репозитория. Таким образом, если userRole не равно нулю, пользователь находится в роли хранилища, но если userRole равно нулю, пользователь не находится в роли хранилища.

2 голосов
/ 28 ноября 2011

Да, вы можете, вам просто нужно исправить свой linq для вызова конструктора вместо присвоения значений (несуществующим) свойствам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...