LINQ | ArgumentOutOfRangeException:索引超出范围

时间:2018-02-10 11:40:26

标签: c# entity-framework linq

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]));

非常感谢任何评论。

1 个答案:

答案 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的其他代码(示例中未显示)隔离。