0

我在使用具有对象列表的类时遇到问题-基本上它是一个购物车,您可以在其中添加物品。我希望这些项目按项目 ID 分组,这样它们就不会在购物车中出现更多次。

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

首先,有没有办法以这种方式自动组织列表?

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

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”。存在显式转换(您是否缺少演员表?)

有任何想法吗?

谢谢

编辑:我编辑了错误

Cartitems 只是: public List cartItems;

在 CartItemList 类中

4

2 回答 2

1

您应该指定所需的分组元素,如下所示:

list.cartItems = l.First();

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

于 2013-11-14T07:08:10.460 回答
0

为了解决您需要在查询中更改选择子句 - 在选择中您可以应用聚合函数,如下所示:

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

并检查您的输入

于 2013-11-14T07:14:46.707 回答