如何按组将数据存储在列表中?
说,
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
吗?此外,产品也可以有新的记录?
答案 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());