【发布时间】:2018-02-10 11:40:26
【问题描述】:
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。并抛出异常。
例外:
消息=尝试评估 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]));
非常感谢任何 cmets。
【问题讨论】:
-
您好 mjwills,感谢您的及时回复。但是slots_for是IQueryable
类型,而toTlist()返回List ……不行…… -
intFeatureIDs 到此结束...我没有任何其他代码触及这个变量了...
-
LINQ的延迟评估会忽略for循环中的变量吗?这是你暗示的吗?
-
检查一下。
-
你就是男人!!!我明白了,“i”仅在 for 循环中可见。延迟时,价值丢失。非常感谢!!!
标签: c# entity-framework linq