gpt4 book ai didi

c# - 在迭代期间从 EntitySet 中删除实体

转载 作者:行者123 更新时间:2023-11-30 13:21:04 24 4
gpt4 key购买 nike

我有这段代码...看起来不错而且优雅,但显然框架不喜欢它,因为我在遍历它时弄乱了一个集合:

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
//...
}
}

迭代到集合中的第二个对象时抛出的错误是:“EntitySet 在枚举期间被修改”

我知道我可以创建一个新的 KitGroup 对象集合(甚至只是 ID),我想删除,然后另一个循环遍历这些对象,并将它们从集合中删除,但这似乎是不必要的额外代码...任何人都可以建议一种更优雅的方法来实现同样的事情吗?

最佳答案

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
//...
}
}

或者如果 KitGroups 的类型是 List<T>已经……

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
//...
}

您也可以在另一个 IEnumerable<T> 上使用第二种方法如果你想定义 RemoveAll()具有扩展方法的行为。请确保您不要尝试使用 RemoveAll()在 LINQ 实体表上,因为 inKitGroupExclusion.Contains()不会被翻译成 SQL。

编辑:刚刚意识到它不是一个列表,只是一个 EntitySet , 因此您需要使用第一种方法。

关于c# - 在迭代期间从 EntitySet 中删除实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2954546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com