我正在尝试使用Entity Framework删除一些项目。我想删除DestinationId
中不在int[] destinationIds
内的foreach (var destination in product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId)))
product.ImportedProductDestinations.Remove(destination);
项。 (我正在删除联结表中的行。)
foreach
但{{1}}语句给出了运行时错误:
收藏被修改;枚举操作可能无法执行。
好吧,我想我明白这个错误。但我怎么能做我想做的事呢?
答案 0 :(得分:5)
不要从正在扫描的集合中删除该项目,将其从db上下文中删除
context.IMportedProductDestinations.DeleteObject(destination);
然后使用context.SaveChanges
将更改应用于db答案 1 :(得分:2)
您收到异常是因为,您正尝试使用foreach
迭代集合并从中删除项目。您可以将ToList
添加到product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId))
,然后移除该项。
foreach (var destination in product.ImportedProductDestinations
.Where(ipd => !destinationIds.Contains(ipd.DestinationId))
.ToList())
{
product.ImportedProductDestinations.Remove(destination);
}
答案 2 :(得分:1)
当你在foreach中迭代它时,你不能从集合中删除一个项目。
var result = product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId)).ToList());
For(int i= 0;i<result.count();i++)
(
product.ImportedProductDestinations.Remove(result[i]);
)
答案 3 :(得分:1)
创建删除列表:
foreach (var destination in product.ImportedProductDestinations.Where(ipd => !destinationIds.Contains(ipd.DestinationId)))
ListRemove.Add(ipd.DestinationId)
foreach (var remove in ListRemove)
product.ImportedProductDestinations.Remove(remove)