开发者

Removing an Entity from an EntitySet during Iteration

开发者 https://www.devze.com 2023-01-02 03:06 出处:网络
I\'ve got this code... seems nice and elegant, but apparently the framework don\'t like it when i mess with a collection while iterating through it:

I've got this code... seems nice and elegant, but apparently the framework don't like it when i mess with a collection while iterating through it:

foreach (KitGroup kg in ProductToTransfer.KitGroups)    
{    
// Remove kit groups that have been excluded by the user    
if (inKitGroupExclusions != null && inKitGroupExclusions.Contains(kg.KitGroupID))    
    ProductToTransfer开发者_运维问答.KitGroups.Remove(kg);    
else    
{    
// Loop through the kit items and do other stuff    
//...    
}    
}

The error it throws when it iterates to the 2nd object in the collection is: "EntitySet was modified during enumeration"

I know i could create a new collection of KitGroup objects (or even just IDs) that i want to remove, and then another loop afterwards to loop through these, and remove them from the collection, but this just seems like unnecessary extra code... can anybody suggest a more elegant way of achieving the same thing?


foreach (KitGroup kg in ProductToTransfer.KitGroups.ToList())    
{    
 // Remove kit groups that have been excluded by the user    
 if (inKitGroupExclusions != null && inKitGroupExclusions.Contains(kg.KitGroupID))    
     ProductToTransfer.KitGroups.Remove(kg);    
 else    
 {    
 // Loop through the kit items and do other stuff    
 //...    
 }    
}

or if KitGroups is of type List<T> already...

if(inKitGroupExclusion != null)
    ProductToTransfer.KitGroups.RemoveAll(x => inKitGroupExclusion.Contains(x));
foreach (KitGroup kg in ProductToTransfer.KitGroups)    
{    
    // Loop through the kit items and do other stuff    
    //...    
}

You can also use this second method on another IEnumerable<T> if you want to define the RemoveAll() behavior with an extension method. Be sure you don't try to use the RemoveAll() on a LINQ entity table because the inKitGroupExclusion.Contains() won't get translated into SQL.

Edit: just realized that it's not a list, just an EntitySet, so you will need to go with the first method.

0

精彩评论

暂无评论...
验证码 换一张
取 消