2015-11-19 3 views
0

Этот запрос занял пару дней, но я почти там. Я взломал свой путь через LINQ для сущностей, чтобы придумать следующее из чтения большого количества учебников. Однако этой последней части мне не хватает.Linq проекция вложенная LIST <T> property

У меня есть два основных объекта:

public class DashboardNavigation() 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    .....etc..... 
    public List<SubNav> SubDashNav {get; set;} 
} 

public class SubNav() 
{ 
    ....properties.... 
} 




var query = _mlsDashboardNavRepository.Table 
     .OrderBy(x => x.Id) 
     .Select(x => new 
     { 
      Id = x.Id, 
      Name = x.Name, 
      Description = x.Description, 
      ImageUrl = x.ImageUrl, 
      SubDashNav = _mlsSubDashNav.Table 
       .Where(s => s.DashId == x.Id) 
       .Select(y => new { Id = y.Id, DashId = y.DashId, Name = y.Name, Description = y.Description, ImageUrl = y.ImageUrl, IsAdvanced = y.IsAdvanced }).ToList() 

     }).ToList().Select(q => new MLS_DashboardNavigation() 
          { 
           Id = q.Id, 
           Name = q.Name, 
           Description = q.Description, 
           ImageUrl = q.ImageUrl, 
           SubDashNav = ...??? 

          }).ToList(); 

Мои Linq проекты DashboardNavigation правильно, но я не могу понять, как получить SubDashNav заселена ???

+0

Что не так с 'SubDashNav = q.SubDashNav'? – Aron

+0

Я думал об этом, но он все еще нуждается в каком-то преобразовании, поскольку linq видит его как List , но свойство определено List Это то преобразование, которое заставляет меня думать, что я тоже должен проецировать его ...? – GPGVM

+0

Erm ... тогда избавьтесь от '.Select'. В этом нет необходимости. – Aron

ответ

1

Вам не нужно выбирать дважды. Я думаю, что это делает то же самое.

var query = _mlsDashboardNavRepository.Table 
    .OrderBy(x => x.Id) 
    .Select(x => new MLS_DashboardNavigation() 
    { 
     Id = x.Id, 
     Name = x.Name, 
     Description = x.Description, 
     ImageUrl = x.ImageUrl, 
     SubDashNav = _mlsSubDashNav.Table 
      .Where(s => s.DashId == x.Id).ToList() 
    }).ToList(); 

И если вы используете Entity Framework и навигационные свойства с DashIs в качестве внешнего ключа в subNavDash таблицу, то вы могли бы даже быть в состоянии сделать это

var query = _mlsDashboardNavRepository.Table 
    .OrderBy(x => x.Id) 
    .Select(x => new MLS_DashboardNavigation() 
    { 
     Id = x.Id, 
     Name = x.Name, 
     Description = x.Description, 
     ImageUrl = x.ImageUrl, 
     SubDashNav = x.SubDashNav 
    }).ToList(); 

И если MLS_DashboardNavigation того же типа, как _mlsDashboardNavRepository.Table вам даже не нужно будет выбирать, как это все равно возвращается.

var query = _mlsDashboardNavRepository.Table 
    .OrderBy(x => x.Id).ToList()