如何对数据进行分组并按组将它们存储在新列表中

时间:2014-10-24 16:21:35

标签: c# linq

如何按组将数据存储在列表中?

说,

public class ProductPrice
{
  public string Name { get; set }
  public decimal Price { get; set; }
  // Date and other properties
}

然后有这样的记录:

+--------+--------+
| Name   | Price  |
+--------+--------+
| Chair  | 11     |
| Table  | 15     |
| Table  | 30     |
| Window | 24     |
| Chair  | 29     |
+--------+--------+

为了获得这样的列表,应该做些什么:

{
  {
    new ProductPrice { Name = "Chair", Price = 11 },
    new ProductPrice { Name = "Chair", Price = 29 },
  },
  {
    new ProductPrice { Name = "Table", Price = 15 },
    new ProductPrice { Name = "Table", Price = 30 }
  },
  {
    new ProductPrice { Name = "Window", Price = 24 }
  }
}

如您所见,它们按Name分组,并将它们存储在每个组的列表中。将它们提供给折线图来看看它们的价格趋势会很棒。只是我很难创建列表。

简而言之,我可以创建一个按产品名称分组的List吗?此外,产品也可以有新的记录?

1 个答案:

答案 0 :(得分:3)

您需要的是List<List<ProductPrice>>,您可以这样做:

List<List<ProductPrice>> groupedList = list.GroupBy(r => r.Name)
                    .Select(grp => new
                            {
                                List = grp.Select(r => r).ToList()
                            })
                    .Select(r => r.List)
                    .ToList();

这将为您返回每个组List中的三个值。

您还可以将结果投影到Dictionary<string, List<ProductPrice>>,其中key将是产品名称,价值将包含与Key相关的List<ProductPrice>。使用Enumerable.ToDictionary之类的:

Dictionary<string, List<ProductPrice>> groupedList = list.GroupBy(r => r.Name)
                        .ToDictionary(grp => grp.Key, grp => grp.ToList());