C#列表<&燃气轮机;订购人/分组人/删除

C#列表<&燃气轮机;订购人/分组人/删除,c#,list,C#,List,我从哪里开始。。。 好的,我有一个列表,我必须,根据两个属性将“”切割成更小的列表。当我处理完小列表后,我希望将其项目从原始列表中删除:) f、 前。我有一个CustomerProducts列表,其中包含两个值CustomerID和ProductID。首先,我对列表进行排序: var orderedList=CustomerProducts.OrderBy(c=>c.CustomerID)。然后by(c=>c.ProductID)ToList() 假设ordereded列表现在如下所示: Cus

我从哪里开始。。。 好的,我有一个列表,我必须,根据两个属性将“”切割成更小的列表。当我处理完小列表后,我希望将其项目从原始列表中删除:)

f、 前。我有一个CustomerProducts列表,其中包含两个值CustomerID和ProductID。首先,我对列表进行排序:

var orderedList=CustomerProducts.OrderBy(c=>c.CustomerID)。然后by(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不是空的

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

有什么聪明的解决方案吗??聪明的意思是短代码和漂亮的代码:)

var-groupedList=orderedList
.GroupBy(c=>new{c.CustomerId,c.ProductId})
.OrderBy(g=>g.Key.CustomerId)
.ThenBy(g=>g.Key.ProductId)
.ToList();
foreach(groupedList中的var组)
{
List cps=group.ToList();
//使用此客户产品进行一些工作
//无需执行低效的列表删除-只需转到下一组即可。
}

为了确保您得到的答案能够解决您的问题,您真的需要维护逐渐缩小的有序列表(这可能至少有点贵),还是只需要按顺序处理匹配customerid/productid的组中的项目?前者需要不断构建新的列表(或者从一开始就删除,这两种操作都相对昂贵),而后者可以使用一种相当直接的分组操作。我同意乔纳森的评论。听起来你脑子里似乎有一个解决问题的想法,但却很难实现。与其告诉我们你试图使用的锤子,不如告诉我们你正在建造的房子;锤子可能是安装管道的错误工具。您能否通过正在执行的业务操作来描述问题,而不是通过建议的基于可变列表的解决方案的实现细节来描述问题?
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.
}