LINQ .NET 4.0 - ГДЕ В ОДНОМ ОК - ОРДЕРБИЯ В ОДНОМ ОК - ГДЕ И ОРДЕРБИЯ Сбой - PullRequest
0 голосов
/ 19 марта 2011

Ниже работает правильно, без ошибок:

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, но оба предложения вместе терпят неудачу

1 Ответ

0 голосов
/ 19 марта 2011

Я считаю, что проблема в том, что запросы LINQ не оцениваются, пока вы не выполните их перечисление. DispLevel может вывести throw new Exception(), и первые два блока сами по себе не вызовут проблем. Когда вы попадаете в третий блок, где вы перечисляете запрос, возникает исключение.

Загляните глубже в свойство DispLevel, и вы найдете причину проблемы.

...