如何使用linq分组和按集合排序?

时间:2014-03-20 08:19:51

标签: c# linq

我这样做但是它不起作用(不要编译),我需要GroupBy然后是OrderBy。

lstOrderItems.OrderBy(x => x.itemPrice).GroupBy(p => p.CatID);

2 个答案:

答案 0 :(得分:3)

var Result = lstOrderItems.GroupBy(p=> p.CatID).Select(group => group.OrderByDescending(d=> d.itemPrice));

答案 1 :(得分:3)

你在这里有一个理解的问题。如果你进行分组,你将拥有一个可以使用的属性:密钥。

我将带有产品表的northwind数据库作为参考。如果您按CategoryId Products.GroupBy (p => p.CategoryID)对产品进行分组,则可以添加OrderBy。但是,之后您可以订购的唯一属性是关键:

//p.Key is the CategoryId after which you grouped by
Products.GroupBy (p => p.CategoryID).OrderBy (p => p.Key)

您需要做的是选择分组并使用它:

Products.GroupBy (p => p.CategoryID).Select (p => p.OrderBy (x => x.UnitPrice))

如果您想展平结果,请使用SelectMany

Products.GroupBy (p => p.CategoryID).SelectMany (p => p.OrderBy (x => x.UnitPrice))

修改的 澄清Select / SelectMany问题:这是您使用Select获得的内容。返回类型为IOrderedQueryable<IOrderedEnumberable<Products>>。实质上是列表中的List。

enter image description here

如果您使用SelectMany(),则将列表中的此列表展平为一个列表

enter image description here