C# 任务[0]。完成者) @Html.DisplayNameFor(model=>model.AccountRequest[0].CompletedDate) @foreach(Model.AccountRequest中的var项){ @DisplayFor(modelItem=>item.CompletedDate) @DisplayFor(modelItem=>item.PracticeName) @DisplayFor(modelItem=>item.GroupID) @DisplayFor(modelItem=>item.Group.SalesRep) @DisplayFor(modelItem=>item.RequestedBy) @DisplayFor(modelItem=>item.RequestDate) @如果(item.RequestStatus==1) { Html.显示(“已完成”); }else if(item.RequestStatus==2) { Html.Display(“拒绝”); }否则如果(item.RequestStatus==3) { Html.Display(“在不同组下”); }else if(item.RequestStatus==4) { Html.显示(“账户关闭”); } @DisplayFor(modelItem=>item.ClientId) @DisplayFor(modelItem=>item.CompletedBy) @DisplayFor(modelItem=>item.CompletedDate) 细节 }

C# 任务[0]。完成者) @Html.DisplayNameFor(model=>model.AccountRequest[0].CompletedDate) @foreach(Model.AccountRequest中的var项){ @DisplayFor(modelItem=>item.CompletedDate) @DisplayFor(modelItem=>item.PracticeName) @DisplayFor(modelItem=>item.GroupID) @DisplayFor(modelItem=>item.Group.SalesRep) @DisplayFor(modelItem=>item.RequestedBy) @DisplayFor(modelItem=>item.RequestDate) @如果(item.RequestStatus==1) { Html.显示(“已完成”); }else if(item.RequestStatus==2) { Html.Display(“拒绝”); }否则如果(item.RequestStatus==3) { Html.Display(“在不同组下”); }else if(item.RequestStatus==4) { Html.显示(“账户关闭”); } @DisplayFor(modelItem=>item.ClientId) @DisplayFor(modelItem=>item.CompletedBy) @DisplayFor(modelItem=>item.CompletedDate) 细节 },c#,linq,asp.net-core,razor-pages,C#,Linq,Asp.net Core,Razor Pages,为什么要使用!=操作员导致了这样的错误,我能做些什么来修复它 提前感谢您的帮助。有关其中一条返回的记录,其中a.RequestStatus!=0计算为true时,组关系为空,这将在计算该记录的a.Group.saleRep或a.Group.saleRep时导致NRE 您可以通过添加一个检查来查看关系是否存在(见下文),但是这可能不是逻辑上正确的(这取决于数据约束和您考虑的坏数据,这确实是一个商业决策)。 var请求= 从in_context.AccountRequests中 a组在哪里!=空&&

为什么要使用!=操作员导致了这样的错误,我能做些什么来修复它


提前感谢您的帮助。

有关其中一条返回的记录,其中
a.RequestStatus!=0
计算为true时,
关系为空,这将在计算该记录的
a.Group.saleRep
a.Group.saleRep
时导致NRE

您可以通过添加一个检查来查看关系是否存在(见下文),但是这可能不是逻辑上正确的(这取决于数据约束和您考虑的坏数据,这确实是一个商业决策)。
var请求=
从in_context.AccountRequests中

a组在哪里!=空&&//Try
!(a.RequestStatus==0)
而不是
a.RequestStatus!=0
fakepath\Pages\SalesReps\CompletedAccountRequests\Index.cshtml.cs:line 30
如果不起作用,请尝试
!(a.RequestStatus.Equals(0))
@RobertHarvey我尝试了你的两个建议,但不幸的是,两个建议都无效。你收到的错误是有逻辑原因的。您正在尝试取消引用包含null的引用变量。无论如何,最好是找出这个逻辑原因是什么。正如@Igor指出的,您还没有向我们展示实际引发异常的代码。非常感谢。这对我很有效。我甚至没有考虑过,会计任务之间的关系会以这样的方式影响它。我将确保在以后的页面中注意这一点。就其逻辑部分而言,我将对为这些对象输入的数据添加限制,这样就不会显示不正确的数据。
System.NullReferenceException: Object reference not set to an instance of an object.
   at lambda_method(Closure , AccountRequest )
   at System.Linq.AsyncEnumerable.WhereSelectEnumerableAsyncIterator`2.<MoveNextCore>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Linq.AsyncEnumerable.AsyncIterator`1.<MoveNext>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.<MoveNext>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at System.Linq.AsyncEnumerable.<Aggregate_>d__6`3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Webapp.Pages.SalesReps.CompletedAccountRequests.IndexModel.<OnGetAsync>d__10.MoveNext() in fakepath\Pages\SalesReps\CompletedAccountRequests\Index.cshtml.cs:line 30
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using WebApp.Data;
using WebApp.Models;

namespace WebApp.Pages.SalesReps.NewAccountRequests
{
    public class IndexModel : PageModel
    {
        private readonly AccessionContext _context;

        public IndexModel(AccessionContext context)
        {
            _context = context;
        }

        public IList<AccountRequest> AccountRequest { get;set; }
        public IList<String> Claims { get; set; }

        public async Task OnGetAsync()
        {
            var claim = from c in User.Claims where c.Type == "SalesRep" select c.Value;
            Claims = claim.ToList();
            var requests = 
                from a in _context.AccountRequests 
                where ((Claims.Contains(a.Group.SalesRep)) 
                    || (Claims.Contains(a.Group.Manager))) 
                    && a.RequestStatus == 0 
                orderby a.RequestDate 
                select a;

            if (requests != null)
            {
                AccountRequest = await requests.ToListAsync();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using WebApp.Data;
using WebApp.Models;

namespace WebApp.Pages.SalesReps.CompletedAccountRequests
{
    public class IndexModel : PageModel
    {
        private readonly AccessionContext _context;

        public IndexModel(AccessionContext context)
        {
            _context = context;
        }

        public IList<AccountRequest> AccountRequest { get;set; }
        public IList<String> Claims { get; set; }

        public async Task OnGetAsync()
        {
            var claim = from c in User.Claims where c.Type == "SalesRep" select c.Value;
            Claims = claim.ToList();
            var requests = 
                from a in _context.AccountRequests 
                where ((Claims.Contains(a.Group.SalesRep)) 
                    || (Claims.Contains(a.Group.Manager))) 
                    && a.RequestStatus != 0 
                orderby a.RequestDate 
                select a;
            AccountRequest = await requests.ToListAsync();
        }
    }
}
@page
@model WebApp.Pages.SalesReps.CompletedAccountRequests.IndexModel

@{
    ViewData["Title"] = "Index";
}

<h2>Index</h2>

<table class="table">
    <thead>
        <tr>
            <th>
                Date Completed
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].PracticeName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].GroupID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].Group.SalesRep)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].RequestedBy)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].RequestDate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].RequestStatus)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].ClientIDS)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].CompletedBy)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.AccountRequest[0].CompletedDate)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model.AccountRequest) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CompletedDate)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PracticeName)
            </td>
            <th>
                @Html.DisplayFor(modelItem => item.GroupID)
            </th>
            <th>
                @Html.DisplayFor(modelItem => item.Group.SalesRep)
            </th>
            <td>
                @Html.DisplayFor(modelItem => item.RequestedBy)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.RequestDate)
            </td>
            <td>
                @if (item.RequestStatus == 1)
                {
                    Html.Display("Completed");
                } else if(item.RequestStatus == 2)
                {
                    Html.Display("Denied");
                } else if (item.RequestStatus == 3)
                {
                    Html.Display("Under Different Group");
                } else if (item.RequestStatus == 4)
                {
                    Html.Display("Account Closed");
                }
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ClientIDS)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CompletedBy)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CompletedDate)
            </td>
            <td>
                <a asp-page="./Details" asp-route-id="@item.AccountRequestID">Details</a>
            </td>
        </tr>
}
    </tbody>
</table>
var requests = 
    from a in _context.AccountRequests 
    where a.Group != null && // <-- added null check
        ((Claims.Contains(a.Group.SalesRep)) || (Claims.Contains(a.Group.Manager))) 
        && a.RequestStatus != 0 
    orderby a.RequestDate 
    select a;