2017-01-09 6 views
0

Я хочу совместить имя списка в списке. Сообщение об ошибке: LINQ to Entities не распознает метод «System.String Join (System.String, System.String [])», и этот метод не может быть переведен в выражение хранилища.Как сделать linq для sql String Join?

dgv.DataSource = this.oFacade.Context.Books 
             .Include(c => c.Categories) 
             .Select(c => new dtoObjectDGV 
             { 
              ID = c.ID, 
              Name = c.Name, 
              CategoryInfo= String.Join(", ", c.Categories.Select(d => d.Name).ToArray()) 
             }).ToList(); 

результат: Name = C# Book CategoryInfo = X Категория, Y Категория, ... бла-бла

ответ

1

Join метод не поддерживается в Linq для лиц, я предлагаю вам проецировать первую информацию вам нужно а затем, используя метод AsEnumerable расширения, вы можете переключиться на Linq к объекту использовать Join метод:

DataSource=this.oFacade.Context.Books 
           .Include(c => c.Categories) 
           .Select(c => new 
              { 
               ID = c.ID, 
               Name = c.Name, 
               Categories= c.Categories.Select(d => d.Name) 
              }) 
           .AsEnumerable() 
           .Select(c => new dtoObjectDGV 
              { 
               ID = c.ID, 
               Name = c.Name, 
               CategoryInfo= String.Join(", ", c.Categories) 
              }) 
          .ToList(); 

Если таблица не имеет многие столбцы, то вы можете рассмотреть не сделать первый прогноз:

DataSource=this.oFacade.Context.Books 
           .Include(c => c.Categories) 
           .AsEnumerable() 
           .Select(c => new dtoObjectDGV 
              { 
               ID = c.ID, 
               Name = c.Name, 
               CategoryInfo= String.Join(", ", c.Categories.Select(d => d.Name).ToArray()) 
              }) 
           .ToList();