如何在C#&amp ;;中修复此错误LINQ?

时间:2017-03-21 13:26:19

标签: c# asp.net-mvc linq

我在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);

2 个答案:

答案 0 :(得分:3)

错误表示LINQ查询的类型与属性Links的类型不匹配。它是一个EF查询,具有IQueryable<T>类型。此查询的项目是包含字符串键的组:IGrouping<string, myProject.Models.Link>。另一方面,属性是Link模型的简单列表。所以,你需要做两件事:

  1. 从每个组中获取模型
  2. 将查询结果保存到列表
  3. 从每个组中选择第一项的示例代码:

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