Невозможно неявно преобразовать вложенные объекты типа 'IEnumerable<ob>' в 'Generic.List<cdsworkflows>'

У меня ниже классы

public class cdsworkflows
{
    public string WorkflowName;
    public string ActionGroup;
}  

public class cdssystems
{
    public string cdsSystemName;
    public List<cdsmodules> listModules;
}

public class cdsmodules
{
    public string moduleName;
    public List<cdsworkflows> listWorkflows;
}

Я помещаю значения в вышеуказанные объекты из таблицы со всеми этими данными, как показано ниже. Я получаю сообщение об ошибке "выберите новое", которое:

Невозможно неявно преобразовать тип System.Collections.Generic.IEnumerable<cdsworkflows> в System.Collections.Generic.List<cdsworkflows>, Существует явное преобразование (вам не хватает приведения?)

Также, если вы видите последнюю строку ActionGroup = grpWorkflows.Count().ToString() Я хочу присвоить значение, а не количество. Как это сделать.

List<cdssystems> results =
    (from SPListItem item in myItemsList
     group item by item["Systems"]
     into grp
     select new cdssystems()
     {
         cdsSystemName = grp.Key.ToString(),
         listModules =
            from item in grp
            group item by item["Modules"]
            into grpModules
            select new cdsmodules()
            {
                moduleName = grpModules.Key.ToString(),
                listWorkflows =
                    from item in grpModules
                    group item by item["Workflows"]
                    into grpWorkflows
                    select new cdsworkflows()
                    {
                        WorkflowName = grpWorkflows.Key.ToString(),
                        ActionGroup = grpWorkflows.Count().ToString()
                    }
            }
     }
    ).ToList();

1 ответ

Решение

Классы вашей модели содержат свойства типа List<T> но в ваши вложенные запросы вы не добавляете ToList() в проекции, так что создает IEnumerable<T> и, следовательно, ошибка:

За listWorkflows: изменить на:

listWorkflows = (from item in grpModules
                 group item by item["Workflows"] into grpWorkflows
                 select new cdsworkflows
                 {
                    WorkflowName = grpWorkflows.Key.ToString(),
                    ActionGroup = grpWorkflows.Count().ToString()
                 }).ToList()

Та же идея для cdsmodules

Для второй части вопроса я хочу присвоить значение, а не изменить счет:

 ActionGroup = string.Join(", ", grpWorkflows.Select(i => i["ActionGroup"]))

Также:

  1. пожалуйста, обратитесь к соглашениям об именах C#: MSDN, dotFactory
  2. Я полагаю, что если вы определите свои поля как public иметь их как свойства. См. Это для справки: Свойства и поля. Нужна помощь в понимании использования свойств над полями.
Другие вопросы по тегам