kia9372 Ответов: 3

Не удается неявно преобразовать тип storefinal'.лиц. лиц. идентичности.роль' к 'системе.коллекции.универсальный.список<storefinal.модель представления.rolemanagerviewmodel.childrole&ГТ;'


привет.

это мой модельный вид .

public class RoleAccess
{
    public int id { get; set; }
    public string name { get; set; }
    public List<ChildRole> children { get; set; }
}



а это Чайлдрол :

public class ChildRole
{
    public int id { get; set; }
    public int parentid { get; set; }
    public string name { get; set; }

}


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

public List<RoleAccess> SubRole()
{
    List<RoleAccess> sub = new List<RoleAccess>();
    foreach (var parent in Roles.Where(x => x.Id == 0))
    {
        foreach (var child in Roles.Where(x=>x.RoleLevel==parent.Id))
        {
            sub.Select(role=>new RoleAccess
            {
                id = parent.Id,
                name = parent.Description,
                children=child
            });
        }
    }
    return sub;
}



но он показывает мне эту ошибку в этой строке :
children=child


Ошибка :
Cannot implicitly convert type 'StoreFinal.Entities.Entities.Identity.Role' to 'System.Collections.Generic.List<StoreFinal.ViewModel.RoleManagerViewModel.ChildRole>'


Что я уже пробовал:

public List<RoleAccess> SubRole()
{
    List<RoleAccess> sub = new List<RoleAccess>();
    foreach (var parent in Roles.Where(x => x.Id == 0))
    {
        foreach (var child in Roles.Where(x=>x.RoleLevel==parent.Id))
        {
            sub.Select(role=>new RoleAccess
            {
                id = parent.Id,
                name = parent.Description,
                children=child
            });
        }
    }
    return sub;
}

3 Ответов

Рейтинг:
2

OriginalGriff

Ну нет - children это набор объектов ChildRole, и вы пытаетесь назначить ему (как это выглядит) экземпляр одной роли - это не сработает.
Ты хотел сказать

children.Add(child);
Если нет, то вам нужно посмотреть, какой именно тип а child это - мы не можем сказать отсюда!


kia9372

это не шоу добавить способ В для детей

OriginalGriff

- Вы уверены?
Вы объявили детей как общую коллекцию:

публичный список<childrole> children { get; set; }

И список всегда имеет метод добавления!
Если, конечно, у вас нет другой переменной под названием children в аналогичной области видимости?

Рейтинг:
1

F-ES Sitecore

sub.Select(role=>new RoleAccess
{
    id = parent.Id,
    name = parent.Description,
    children=child
});


"дети" - это список, и вы пытаетесь присвоить ему один элемент. Что вам нужно сделать, так это составить список с одним элементом в нем и назначить его детям. Вы делаете это с помощью такого кода;

sub.Select(role=>new RoleAccess
{
    id = parent.Id,
    name = parent.Description,
    children= new List<ChildRole> { child }
});


kia9372

спасибо, что ответили на мой вопрос . эта ошибка решена, но у этого кода есть проблема .

мне нужно получить список ролей и подролей (childrole) .

когда я использовал этот код . чайлдрол не войдет в главную роль :

мне нужно вот так вернуться :

 *(Role)
       *(childRole)
       *(childRole)
       *(childRole)
 *(Role)
       *(childRole)
       *(childRole)
       *(childRole)

but it show me this with your code : 

 *(Role)
       *(childRole)
*(Role)
       *(childRole)
*(Role)
       *(childRole)
*(Role)
       *(childRole)
*(Role)
       *(childRole)


в чем проблема ? как я могу решить эту проблему ???

F-ES Sitecore

Вам, вероятно, придется разделить это на несколько строк. Сначала получите роль, а затем проверьте свойство children. Если он равен null, то установите его в новый список, а затем добавьте в него дочерний элемент. Таким образом, роли без детей получают новый список с одним элементом, но роли, у которых уже есть дети, получают ребенка, добавленного в существующий список.

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

Рейтинг:
0

Richard Deeming

Попробуйте что-нибудь вроде этого:

public List<RoleAccess> SubRole()
{
    return Roles
        .Where(parent => parent.RoleLevel == 0)
        .AsEnumerable()
        .Select(parent => new RoleAccess
        {
            Id = parent.Id,
            Name = parent.Description,
            children = Roles
                .Where(child => child.RoleLevel == parent.Id)
                .AsEnumerable()
                .Select(child => new ChildRole
                {
                    Id = child.Id,
                    ParentId = parent.Id,
                    Name = child.Description,
                })
                .ToList(),
        })
        .ToList();
}