LINQ-列表分组方式

LINQ-列表分组方式,linq,lambda,Linq,Lambda,我遇到了一个类的问题,它有一个对象列表-基本上它是购物车,你可以在那里添加物品。我希望根据项目id对项目进行分组,这样它们就不会在购物车中出现更多次 因此,如果您添加一个项目,然后再次添加,它应该显示为1行,数量=2,而不是2行数量1 首先,有没有一种方法可以通过这种方式自动组织列表 如果没有,那么我需要另一个变量: var l = from i in list.cartItems group i by i.id into g select g.ToList(); list.cartItems

我遇到了一个类的问题,它有一个对象列表-基本上它是购物车,你可以在那里添加物品。我希望根据项目id对项目进行分组,这样它们就不会在购物车中出现更多次

因此,如果您添加一个项目,然后再次添加,它应该显示为1行,数量=2,而不是2行数量1

首先,有没有一种方法可以通过这种方式自动组织列表

如果没有,那么我需要另一个变量:

var l = from i in list.cartItems
group i by i.id into g
select g.ToList();

list.cartItems = l;
list是对象,cartItems是列表,l是要“刷新”的新列表

但是,这会导致一个错误:

无法将类型“System.Collections.Generic.IEnumerable>”隐式转换为“System.Collections.Generic.List”。存在显式转换(是否缺少强制转换?)

有什么想法吗

谢谢

编辑: 我编辑了错误

这些项目只是: 公共物品清单


在CartItemList类中,应该指定所需的分组元素,如下所示:

list.cartItems = l.First();
var l = (from i in list.cartItems
        group i by i.id into g
        select new CartItem(){Id=g.Key, quantity=g.Count()}).ToList();

list.cartItems = l;  

您的cartItems是一个“ListoItems”类型,而var l是一个新的分组类型,即“int,ListoItems”类型。因此,要将“int,ListOfItems”强制转换为cartItems,即“ListOfItems”,您应该从结果集合中选择元素some元素。

要解决此问题,您需要在查询中使用change select子句-在select中,您可以应用如下聚合函数:

list.cartItems = l.First();
var l = (from i in list.cartItems
        group i by i.id into g
        select new CartItem(){Id=g.Key, quantity=g.Count()}).ToList();

list.cartItems = l;  
试试那个工作

var t = Enumerable.Range(1, 10).Select(i => new { Id = i % 3, Q = 1 }).ToList();
var b = from i in t
        group i by i.Id into g
        select new { Id = g.Key, Q = g.Count() };
t = b.ToList();

并检查您的输入

您能提供
cartItems
的声明吗?是的,有,但它只是一个列表。这只获取第一个项目,如何获取所有项目?至少没有错误,谢谢@user1479059您不应该将其强制转换为list.cartItems。只需使用结果l集合。为什么要将其强制转换为cartItems?这没有意义,因为它们是两个不同的系列。嗯,我是个书呆子,所以我不太了解这些东西。。。即使你刚才说了什么,我也不知道idea@user1479059你似乎不太明白你在做什么。你的商店里有一些商品。然后按模型对它们进行分组。它成为模型的集合,其中包含项目的子集合。然后尝试将这个新的子集合回溯到第一个集合。项集合和按模型分组的项集合是两个不同的东西,不能将它们强制转换为另一个。您只能从分组的子集合中选择一些子集合并将其强制转换为基本项集合,因为它们是相同的东西。假设这不起作用,因为CartItem没有quantity属性。@好的,这是一个示例,我不知道什么是
CartItem
是,现在我添加的所有项都显示出来了,但不管数量是多少,只有1。。。有一个q而不是quantityyes,但为什么每个项目的数量只有1-所以如果我添加1本书,然后再添加同一本书,它应该是2。。。这就好像计数不起作用,它应该如何提供示例输入
cartItems
?如果按唯一字段分组,则每个组中将有一个元素