C#List<>按/分组/删除

时间:2009-09-09 12:01:32

标签: c# list

Phew我从哪里开始...... 好的,我有一个列表,我必须根据两个属性切换成较小的列表。当我完成小清单的处理时,我希望从原始列表中删除它的项目:)

f.ex。我有一个List<> CustomerProducts,包含两个值CustomerID和ProductID。我首先订购清单:

  

var orderedList = CustomerProducts.OrderBy( c => c.CustomerID).ThenBy( c => c.ProductID)ToList( );

假设ordereded列表现在如下所示:

  

CustomerID = 1,ProductID = 61
  CustomerID = 1,ProductID = 61
  CustomerID = 1,ProductID = 87
  CustomerID = 2,ProductID = 81
  CustomerID = 2,ProductID = 53

现在我想要一个只包含列表中前两项的新列表(因为它们具有相同的CustomerID和ProductID),并从orderedList中删除这两项,然后继续对其余项进行相同操作。 。而orderedList不为空。

有点像......

  

while(orderedList.Count> 0)
  {
  //创建具有相同值的新列表...
  //在新列表上做一些工作
  //从orderedList中删除新列表
  //继续...
  }

任何智能解决方案的想法?聪明意义短代码和漂亮的课程:)

1 个答案:

答案 0 :(得分:15)

var groupedList = orderedList
  .GroupBy(c => new {c.CustomerId, c.ProductId})
  .OrderBy(g => g.Key.CustomerId)
  .ThenBy(g => g.Key.ProductId)
  .ToList();

foreach(var group in groupedList)
{
  List<CustomerProduct> cps = group.ToList();
  //do some work with this customer products

  //no need to do inefficient list removal - just move on to next group.
}