for (int i = 0; i < intFeatureIDs.Count; i++) {
slots_for = slots_for.Where(s => s.featureSlotMapping.Any(fsm => fsm.featureID == intFeatureIDs[i]));
}
这里,intFeatureID.Count为2.并抛出异常。
Message =尝试评估LINQ查询参数表达式时抛出异常。要显示其他信息,请在覆盖DbContext.OnConfiguring时调用EnableSensitiveDataLogging()。
内部例外1: ArgumentOutOfRangeException:索引超出范围。必须是非负数且小于集合的大小。
如果intFeatureIDs.Count == 1,则没有问题。
此外,如果我注释掉for循环,并手动运行代码两次,它将起作用...
slots = slots.Where(s => s.featureSlotMapping.Any(fsm => fsm.featureID == intFeatureIDs[1]));
slots = slots.Where(s => s.featureSlotMapping.Any(fsm => fsm.featureID == intFeatureIDs[2]));
非常感谢任何评论。
答案 0 :(得分:1)
我建议将代码更改为:
for (int i = 0; i < intFeatureIDs.Count; i++) {
var bob = intFeatureIDs[i];
slots_for = slots_for.Where(s => s.featureSlotMapping.Any(fsm => fsm.featureID == bob));
}
这可以修复代码中的modified closure问题,并可能使代码与可能更改/重新分配intFeatureIDs
的其他代码(示例中未显示)隔离。