2013-05-13 2 views
2

Я заполняю IEnumerable с использованием запроса LINQ. Затем IEnumerable передается в другой класс и добавляется в качестве параметра (в отчет Telerik). На этой линии я получаю System.NullReferenceException. Через отладку я подтвердил, что этот IEnumerable имеет список значений, поэтому я не уверен, почему это происходит.IEnumerable имеет значения, но все еще дает System.NullReferenceException

Вот некоторые важные фрагменты моего кода:

Class1.cs

//Note that divisionList is an List of PKs and divisionTotalsList is a list of DivisionTotalsModel 
foreach (int division in divisionList) 
      { 

       //LINQ Query 
       IEnumerable<DivisionTotalsModel> divSubset = 
        from divno in divisionTotalsList 
        where divno.DivisionNo == division 
        select divno; 


       //Create Report 
       if(divSubset.Any()) 
        Class2.DoStuff(divSubset); 
      } 

Class2.cs

public void DoStuff(IEnumerable<DivisionTotalsModel> divisionList){ 
    using (var divisionTotalsReport = new DivisionReport()) 
     { 
      //There are other parameters here that are working successfully 
      //This is the line that is failing 
      divisionTotalsReport.ReportParameters["list"].Value = divisionList; 
     } 
} 

Почему протекающие здесь ошибка?

ReportParameters работают с другими параметрами (DateTime и int), я просто не включил их в фрагмент кода.

Я пробовал ToList() и успешно получил List<T>, но для Telerik требуется IEnumerable<T>.

вопрос должен лежать с новым параметром, потому что я был в состоянии успешно создать отчет ранее, используя мои другие параметры (DateTime и int). Проблема только началась, когда я попытался добавить этот новый параметр IEnumerable.

Я прошел через отладчик и посмотрел на IEnumerable, он говорит, что база имеет значение null, но когда я перехожу к непубличным членам -> source, я могу видеть элементы.

Решение

Я понял, проблема, я пытался накормить источник данных в качестве параметра. Вместо этого я установил его как источник данных, и он отлично работает.

+1

Возможно, вы можете добавить фрагмент кода, который инициализирует 'ReportParameters'? – Andomar

+0

Отлаживайте код и смотрите, что на самом деле 'null' на этой строке кода. Вероятно, это не 'divisionList'. Коэффициенты заключаются в том, что либо 'ReportParameters' является« null », либо (вероятно, более вероятно), независимо от того, что он возвращает индексатор, является« null ». – Servy

+0

Вы пытались использовать '.ToArray' в linq? – Fendy

ответ

2

На этой линии не только divisionList может быть null, и в этом случае, было бы хорошо.

divisionTotalsReport.ReportParameters["list"].Value = divisionList 

Как NullReferenceException исключение только обычно возникает при попытке разыменования объекта, кандидаты:

  1. divisionTotalsReport
  2. divisionTotalsReport.ReportParameters
  3. divisionTotalsReport.ReportParameters["list"]

Если вы имеете подтвердил, что divisionTotalsReport i s и что ReportParameters возвращает действительную ссылку, то, скорее всего, у нее просто нет элемента list.

Вы не показываете, что инициализирует DivisionReport, но если он загружен из файла отчета, вам может потребоваться добавить параметр list, прежде чем вы сможете его установить.

Смежные вопросы