下面正确运行且没有错误:
IEnumerable<FieldDef> FieldDefQuery =
from fds in FieldDefs
where fds.DispLevel == enumDispLevel.Grid
select fds;
下面正确运行且没有错误:
IEnumerable<FieldDef> FieldDefQuery =
from fds in FieldDefs
orderby fds.DispOrder ascending
select fds;
以下失败:
IEnumerable<FieldDef> FieldDefQuery =
from fds in FieldDefs
where fds.DispLevel == enumDispLevel.Grid
orderby fds.DispOrder ascending
select fds;
foreach (FieldDef fd in FieldDefQuery)
{
Debug.WriteLine(fd.DispName);
}
对于where和orderby子句,它在执行时失败并显示以下消息:
A first chance exception of type 'System.ArgumentOutOfRangeException' occurred
Parameter name: Parameter index is out of range.
at Gabe2a.GabeLib.FieldDef.get_DispLevel() in
at System.Linq.Enumerable.WhereListIterator`1.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
我只是无法弄清楚如何/为什么where子句单独是好的而且orderby-clause单独是好的但是这两个子句一起失败
答案 0 :(得分:0)
我认为问题是LINQ查询在您枚举它们之前不会被评估。 DispLevel可以直接throw new Exception()
,前两个块本身就不会造成任何问题。当你到达枚举查询的第三个块时,抛出异常。
深入了解DispLevel属性,您将找到问题的原因。