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)