e.Result抛出nullreferenceexception

时间:2016-11-10 03:22:52

标签: c# linq

我正在尝试使用On_Selecting事件来填充linqdatasource,而linqdatasource又用于向图表提供数据。当事件触发时,e.Result会抛出一个空引用异常。我无法弄明白这一点。请帮忙。

首先,linqdatasource和图表的代码:

<asp:Chart ID="MonthlyChart"
           runat="server"
           DataSourceID="LinqGetChartData">
    <series>
        <asp:Series Label="#VALX, #VALY"
                    ChartType="Pie"
                    Name="Series1"
                    XValueMember="CostSum"
                    YValueMembers="SalesMonth"></asp:Series>
    </series>
    <chartareas>
        <asp:ChartArea Name="ChartArea1">
            <AxisY Title="Sales Month">
                <LabelStyle Format="MMMM" />
            </AxisY>
            <AxisX Title="Total"></AxisX>
            <Area3DStyle Enable3D="True"
                         WallWidth="10"></Area3DStyle>
        </asp:ChartArea>
    </chartareas>
</asp:Chart>
<asp:LinqDataSource ID="LinqGetChartData"
                    runat="server"
                    ContextTypeName="MegaChallengePapaBobsPizza.Persistence.CustomerEntities"
                    EntityTypeName=""
                    OnSelecting="LinqGetChartData_Selecting"
                    TableName="Customers"></asp:LinqDataSource>

接下来,On_Selecting事件的代码:

protected void LinqGetChartData_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
    var customerList = Domain.CustomerManager.GetCustomers();
    var query = customerList.OrderBy(c => c.OrderDate)
                            .GroupBy(c => c.OrderDate.ToString("MMMM"),
                            (c => c.Cost),
                            (groupKey, totCost) => new SalesResult()
                            {
                                 SalesMonth = groupKey,
                                 CostSum = totCost.Sum()
                            });
    e.Result = query;
}

最后,触发事件的代码:

LinqGetChartData_Selecting(sender, e as LinqDataSourceSelectEventArgs);

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

由于您在Page_Load事件中调用事件处理程序,因此我假设您使用的变量“e”是Page_Load事件的EventArgs参数。此参数的类型不是LinqDataSourceSelectEventArgs,导致以下返回null。

e as LinqDataSourceSelectEventArgs

当您尝试访问属性“Result”null时,将抛出空引用异常。

由于事件处理程序在asp代码中分配给LinqDataSource对象,因此除非您有特殊原因,否则不应在Page_Load中再次调用它。