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

8 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中删除新列表
//继续...
}

对于这个智能解决方案的任何想法?聪明意义短代码和漂亮的当然:)

Amy*_*y B 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.
}
Run Code Online (Sandbox Code Playgroud)