2013-05-13 37 views
2

我正在使用LINQ查詢填充IEnumerableIEnumerable然後被傳遞到另一個類中,並作爲參數添加到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正在與其他參數(DateTimeint),我只是沒有包括在代碼片段中。

我試過ToList()併成功收到List<T>,但Telerik需要IEnumerable<T>

問題有說謊與新的參數,因爲我已經能夠成功地創建以前使用我的其他參數(DateTimeint)的報告。該問題僅在我嘗試添加此新IEnumerable參數時纔開始。

我已經通過調試器,看着IEnumerable,它說基地是空的,但當我去非公共成員 - >源我可以看到的項目。

解決方案

我已經想通了這個問題,我試圖養活數據源作爲參數。我已經將它設置爲數據源,它完美地工作。

+1

也許你可以添加一段代碼來初始化ReportParameters? – Andomar 2013-05-13 15:07:47

+0

調試代碼並查看該代碼行實際上是否爲null。這可能不是'divisionList'。可能的是,無論「索引器返回值爲null」,「ReportParameters」都是「null」還是(可能更可能)。 – Servy 2013-05-13 15:09:06

+0

您是否嘗試過在linq中使用'.ToArray'? – Fendy 2013-05-13 15:12:42

回答

2

在這條線上,不只是divisionList可以是null,事實上,在這種情況下,它會沒事的。

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

由於NullReferenceException例外試圖取消引用一個對象時,通常只發生時,候選人是:

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

如果你已經確認divisionTotalsReport i並且ReportParameters正在返回一個有效的引用,那麼很可能它只是沒有list項目。

您不會顯示什麼初始化DivisionReport,但是如果它是從報告文件加載的,則可能需要先添加list參數,然後才能對其進行設置。

相關問題