Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C&LINQ中修复此错误?_C#_Asp.net Mvc_Linq - Fatal编程技术网

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

C# 如何在C&LINQ中修复此错误?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我在Linq查询中插入了GROUPBY语句。我知道,正因为如此,它会认为这是一种iGroup类型。viewmodel的类型为IEnumerable 错误CS0266无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换。是否缺少强制转换 错误表示LINQ查询的类型与属性链接的类型不匹配。这是一个EF查询,具有IQueryable类型。此查询的项是带有字符串键的组:IGrouping。另一方

我在Linq查询中插入了GROUPBY语句。我知道,正因为如此,它会认为这是一种iGroup类型。viewmodel的类型为IEnumerable

错误CS0266无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.IEnumerable”。存在显式转换。是否缺少强制转换


错误表示LINQ查询的类型与属性链接的类型不匹配。这是一个EF查询,具有IQueryable类型。此查询的项是带有字符串键的组:IGrouping。另一方面,属性是链接模型的简单列表。因此,您需要做两件事:

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

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

解决办法如下:

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

在这里分组的目的是什么?您希望从每个类别名称中获得哪些项目?为什么要对它们进行分组?你期望得到什么结果?也许你真的想要一份订单?一般来说,如果您只想要每个组的第一项,您必须执行类似于选择g.First的操作。并且您可以共享您的viewModel LinkListViewModels组是通用类型,具有两个类型参数,键和集合中值的类型。这就是演员阵容不起作用的原因。我想按类别名称分组,所以每个类别只能得到一个结果,而不能重复内容。我不认为order by在这种情况下会起到神奇的作用。Linq中没有Top方法,我猜你的意思是首先,你不想让SelectMany直接应用到g,就像在SelectG中一样。First@juharr我不是一个编译员,应该是这样。第一个会给你一个编译时错误。因为我使用了SelectMany方法,它的lambda应该返回集合。你现在的方法可以工作了,但是就像我说的,一个简单的selectg。第一个会比SelectMany和Take更简单。你是对的,这就是@Sergey Berezovskiy在他的答案中显示的。非常感谢。这在FirstOrDefault(而不是First)中起作用。因此,我最终得到了:model.Links=from p in db.Links group p by p.category_name to g select g.FirstOrDefault.ToList@neo我的坏,我忘记了EF不支持第一,但不要担心-您将始终有一个项目,不会有默认情况
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);