我在Linq查询中插入了group by语句。我知道因为这个,它会认为它是IGrouping
类型。视图模型的类型为IEnumerable
。
错误CS0266无法隐式转换类型'System.Linq.IQueryable< System.Linq.IGrouping< string,myProject.Models.Link>>'到'System.Collections.Generic.IEnumerable< myProject.Models.Link>'。存在显式转换(您是否错过了演员?)
//The controller
LinkListViewModels model = new LinkListViewModels();
model.Links = (from p in db.Links
group p by p.category_name into g
select g);
return View(model);
答案 0 :(得分:3)
错误表示LINQ查询的类型与属性Links
的类型不匹配。它是一个EF查询,具有IQueryable<T>
类型。此查询的项目是包含字符串键的组:IGrouping<string, myProject.Models.Link>
。另一方面,属性是Link
模型的简单列表。所以,你需要做两件事:
从每个组中选择第一项的示例代码:
model.Links = (from p in db.Links
group p by p.category_name into g
select g.FirstOrDefault()).ToList();
我个人不喜欢混合查询和方法语法。所以这里是方法语法中的相同查询:
model.Links = db.Links.GroupBy(l => l.category_name)
.Select(g => g.FirstOrDefault())
.ToList();
答案 1 :(得分:0)
解决方案可能如下:
LinkListViewModels model = new LinkListViewModels();
model.Links = (from p in db.Links
group p by p.category_name into g
select g).SelectMany(g => g.Take(1)).ToList();
return View(model);