我遇到一个有一个对象列表的类有问题 - 基本上它是一个可以添加项目的购物车。我希望项目按项目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类中
答案 0 :(得分:1)
您应该指定所需的分组元素,如下所示:
list.cartItems = l.First();
您的cartItems是' ListOfItems '类型,你的var l是一个新的分组类型,它是' int,ListOfItems '类型。所以要投射你的' int,ListOfItems '对于< ListOfItems '的cartItems,您应该从结果集合中选择元素。
答案 1 :(得分:0)
为了解决你需要在你的查询中更改select子句 - 在select中你可以应用这样的聚合函数:
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();
并检查您的输入