2016-04-05 4 views
0

У меня есть метод GetAllReportGroups, в котором я только что возвращал IEnumerable, но в обзоре кода мне сказали НЕТ, измените его!Проблема с преобразованием IEnumerable в список

Итак, теперь, когда я создал больше классов, которые я «думал», этот ReportGroupMaster будет подходящим типом возврата, я получаю эту ошибку. Я больше не использую IEnumerable, так что это запутывает меня.

Не может неявно преобразовать тип 'System.Collections.Generic.IEnumerable <> Элементы, внутр Id, Int SortOrder, Int Тип >>' в 'System.Collections.Generic.List. Явное преобразование существует (вы отсутствует бросок?)

Метод:

public List<ReportGroupMaster> GetAllReportGroups(string language) 
    { 

     List<ReportGroup> reportGroups = _envyUnitOfWork.ReportGroupsAll.GetAll().ToList(); 
     List<ReportDefinition> reportDefinition = _envyUnitOfWork.ReportDefinitions.GetAll().ToList(); 
     List<TraxReport> traxReports = _envyUnitOfWork.TraxReports.GetAll().ToList(); 

     List<ReportGroupItem> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupItem() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList(); 

     //List<ReportGroupMaster> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupMaster() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList(); 




     var query = from d in reportGroupItems 
        join r in reportDefinition on d.Id equals r.ReportGroupID into items 
        join cr in traxReports on d.Id equals cr.ReportGroupID into customItems 
        orderby d.SortOrder 
        select new 
        { 
         d.ReportGroupName, 
         items = items.Select(r => new 
         { 
          r.Id, 
          r.ReportGroupName, 
          r.SortOrder, 
          r.ReportGroupID, 
          r.Type// = (int) ReportTypeNames.ReportDefinition //r.Type 
         }).Concat(customItems.Select(cr => new 
         { 
          cr.Id, 
          cr.ReportGroupName, 
          cr.SortOrder, 
          cr.ReportGroupID, 
          cr.Type// = 4 //(int) ReportTypeNames.TraxReport //cr.Type 
         })).OrderBy(e => e.SortOrder).ToList(), 
         d.Id, 
         d.SortOrder, 
         d.Type 
        }; 

     return query; 

    } 

Любые мысли?

ReportGroupMaster

public class ReportGroupMaster 
{ 
    public string ReportGroupName { get; set; } 
    public List<ReportGroupChild> Items { get; set; } 
    public int Id { get; set; } 
    public int SortOrder { get; set; } 
    public int Type { get; set; } 
} 

ReportGroupChild

public class ReportGroupChild 
{ 
    public int Id { get; set; } 
    public string ReportGroupName { get; set; } 
    public int SortOrder { get; set; } 
    public int ReportGroupID { get; set; } 
    public int Type { get; set; } 
} 
+2

«Я просто возвращая IEnumerable, но в обзоре кода мне сказали НЕТ, изменить его» - почему? Любое объяснение? Также прочитайте этот вопрос: http://stackoverflow.com/questions/34334363/is-returning-ilistt-worse-than-returning-t-or-listt/ – Dennis

+1

Предполагая, что ваше преобразование верное, вам не хватает '.ToList () ' –

+0

Где я могу поставить .ToList()? –

ответ

2

Linq запроса в вашем случае возвращает IEnumberable<anonymoustype>, но ожидается, возвращаемый тип List<ReportGroupMaster>, это то, что вызывает ошибку.

Используйте этот код.

public List<ReportGroupMaster> GetAllReportGroups(string language) 
{ 

    List<ReportGroup> reportGroups = _envyUnitOfWork.ReportGroupsAll.GetAll().ToList(); 
    List<ReportDefinition> reportDefinition = _envyUnitOfWork.ReportDefinitions.GetAll().ToList(); 
    List<TraxReport> traxReports = _envyUnitOfWork.TraxReports.GetAll().ToList(); 

    List<ReportGroupItem> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupItem() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList(); 

    //List<ReportGroupMaster> reportGroupItems = reportGroups.Select(reportGroup => new ReportGroupMaster() {Id = reportGroup.Id, ReportGroupName = reportGroup.ReportGroupName, SortOrder = reportGroup.SortOrder, Type = (int) ReportTypeNames.ReportGroup}).ToList(); 




    var query = from d in reportGroupItems 
       join r in reportDefinition on d.Id equals r.ReportGroupID into items 
       join cr in traxReports on d.Id equals cr.ReportGroupID into customItems 
       orderby d.SortOrder 
       select new ReportGroupMaster() 
       { 
        ReportGroupName =d.ReportGroupName, 
        Items = items.Select(r => new 
        { 
         r.Id, 
         r.ReportGroupName, 
         r.SortOrder, 
         r.ReportGroupID, 
         r.Type// = (int) ReportTypeNames.ReportDefinition //r.Type 
        }).Concat(customItems.Select(cr => new 
        { 
         cr.Id, 
         cr.ReportGroupName, 
         cr.SortOrder, 
         cr.ReportGroupID, 
         cr.Type// = 4 //(int) ReportTypeNames.TraxReport //cr.Type 
        })).OrderBy(e => e.SortOrder).ToList(), 
        Id = d.Id, 
        SortOrder = d.SortOrder, 
        Type = d.Type 
       }; 

    return query.ToList(); 

}

+0

Тяжесть \t \t Код Описание \t \t Project File \t \t Line Подавление Государственный Ошибка \t \t CS0029 Не удается неявно преобразовать тип «System.Collections.Generic.List << анонимный тип: INT Id, строка ReportGroupName, внутр SortOrder, внутр ReportGroupID, внутр Тип >> 'to' System.Collections.Generic.List '\t Envy.Business.Услуги \t C: \ dev \ Envy \ Envy.Business.Services \ Report \ ReportService.cs Active –

+0

Мысли? о том, почему проблема ReportGroupChild вызывает проблему (я могу прокомментировать, что «Элементы» выходят, и это работает, но что не так с моими элементами (ReportGroupChild)? –

+0

Я исправил то, что, по моему мнению, было проблемой, public List Items { get; set;}, но у меня все еще есть проблема –

Смежные вопросы