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中删除新列表
//继续...
}
任何智能解决方案的想法?聪明意义短代码和漂亮的课程:)
答案 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.
}