2017-01-09 35 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();