2

我正在IEnumerable使用 LINQ 查询填充。然后IEnumerable将其传递给另一个类并作为参数附加(到 Telerik 报告中)。在这条线上,我得到一个System.NullReferenceException. 通过调试,我已经确认这IEnumerable有一个值列表,所以我不确定为什么会这样。

以下是我的代码的一些相关片段:

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,它说基础为空,但是当我转到非公共成员 - > 源时,我可以看到这些项目。

解决方案

我已经找到了问题所在,我试图将数据源作为参数提供。我已将其设置为数据源,并且效果很好。

4

1 回答 1

2

在这条线上,不只是divisionListcan be null,事实上,在这种情况下,它会很好。

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

由于NullReferenceException异常仅在尝试取消引用对象时才会发生,因此候选对象是:

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

如果您已确认divisionTotalsReport已设置并且ReportParameters返回有效引用,则很可能它只是没有list项目。

您没有显示初始化的内容DivisionReport,但如果它是从报告文件加载的,您可能需要先添加list参数才能设置它。

于 2013-05-14T09:55:57.063 回答