LINQ - 列出组

时间:2013-11-14 06:57:47

标签: linq lambda

我遇到一个有一个对象列表的类有问题 - 基本上它是一个可以添加项目的购物车。我希望项目按项目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类中

2 个答案:

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

并检查您的输入

相关问题