【发布时间】:2013-05-13 15:05:25
【问题描述】:
我正在使用 LINQ 查询填充 IEnumerable。 IEnumerable 然后被传递到另一个类并作为参数附加(到 Telerik 报告)。在这条线上,我收到了System.NullReferenceException。通过调试,我已经确认这个IEnumerable 有一个值列表,所以我不确定为什么会这样。
以下是我的代码的一些相关 sn-ps:
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),我只是没有将它们包含在代码 sn-p 中。
我已尝试ToList() 并成功收到List<T>,但 Telerik 需要IEnumerable<T>。
问题出在新参数上,因为我之前使用其他参数(DateTime 和int)能够成功创建报告。当我尝试添加这个新的IEnumerable 参数时,问题才开始出现。
我已经通过调试器查看了 IEnumerable,它说基数为空,但是当我转到非公共成员时 -> 源代码我可以看到这些项目。
解决方案
我已经解决了问题,我试图将数据源作为参数提供。我已将其设置为数据源,并且效果很好。
【问题讨论】:
-
也许你可以添加一段初始化
ReportParameters的代码? -
调试代码并查看该代码行上的实际
null是什么。可能不是divisionList。很可能ReportParameters是null或者(很可能)无论它的索引器返回什么都是null。 -
你试过在linq中使用
.ToArray吗? -
您是否检查过
divisionTotalsReport、divisionTotalsReport.ReportParameters和divisionTotalsReport.ReportParameters["list"]都是有效的实例化对象? -
@Deanna 是的,我已经能够成功地使用其他参数创建报告。因此问题必须出在新参数上。
标签: c# linq ienumerable telerik-reporting