2017-01-09 32 views
0

我想结合列表中的列表名称。 错误消息:LINQ to Entities无法识别方法'System.String加入(System.String,System.String [])'方法,并且此方法无法转换为存储表达式。linq如何做到sql String加入?

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(); 

结果:名称= C#图书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();