.net core 使用Where linq查询搜索数据库时.Net Core 2.1 EF Core Null引用异常

.net core 使用Where linq查询搜索数据库时.Net Core 2.1 EF Core Null引用异常,.net-core,entity-framework-core,.net Core,Entity Framework Core,我这里有一个非常简单的问题: public async Task<IActionResult> Index(string sortOrder) { ApplicationUser user = await _userManager.GetUserAsync(User); var context = _context.Engine .Include(e => e.EngineType) .Wh

我这里有一个非常简单的问题:

public async Task<IActionResult> Index(string sortOrder)
    {
        ApplicationUser user = await _userManager.GetUserAsync(User);
        var context = _context.Engine
            .Include(e => e.EngineType)
            .Where(e => e.Company == user.Company);

        return View(await context.ToListAsync());
    }
公共异步任务索引(字符串排序器)
{
ApplicationUser user=await\u userManager.GetUserAsync(用户);
var context=\u context.Engine
.Include(e=>e.EngineType)
。式中(e=>e.Company==user.Company);
返回视图(wait context.ToListAsync());
}
问题是它在尝试返回时给了我一个NullReferenceException。我知道问题在于Where语句,因为如果我使用下面的语句,它就可以正常工作

public async Task<IActionResult> Index(string sortOrder)
    {
        ApplicationUser user = await _userManager.GetUserAsync(User);
        var context = _context.Engine
            .Include(e => e.EngineType);

        return View(await context.ToListAsync());
    }
公共异步任务索引(字符串排序器)
{
ApplicationUser user=await\u userManager.GetUserAsync(用户);
var context=\u context.Engine
.包括(e=>e.EngineType);
返回视图(wait context.ToListAsync());
}
我把事情改变了,但没有用。 我在StackOverflow上发现了类似的问题:但是ToList()也不适合我

有人知道发生了什么吗

编辑

错误:

NullReferenceException: Object reference not set to an instance of an object.

lambda_method(Closure , Company )
Microsoft.EntityFrameworkCore.Metadata.Internal.ClrPropertyGetter<TEntity, TValue>.GetClrValue(object instance)
Microsoft.EntityFrameworkCore.Storage.Internal.TypeMappedPropertyRelationalParameter.AddDbParameter(DbCommand command, object value)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand command, IReadOnlyDictionary<string, object> parameterValues)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.CreateCommand(IRelationalConnection connection, IReadOnlyDictionary<string, object> parameterValues)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteAsync(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary<string, object> parameterValues, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.BufferlessMoveNext(DbContext _, bool buffer, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync<TState, TResult>(TState state, Func<DbContext, TState, CancellationToken, Task<TResult>> operation, Func<DbContext, TState, CancellationToken, Task<ExecutionResult<TResult>>> verifySucceeded, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable<T>+AsyncEnumerator.MoveNext(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable+SelectEnumerableAsyncIterator<TSource, TResult>.MoveNextCore(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable+AsyncIterator<TSource>.MoveNext(CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider+ExceptionInterceptor<T>+EnumeratorExceptionInterceptor.MoveNext(CancellationToken cancellationToken)
System.Linq.AsyncEnumerable.Aggregate_<TSource, TAccumulate, TResult>(IAsyncEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> accumulator, Func<TAccumulate, TResult> resultSelector, CancellationToken cancellationToken)
InstantBSI.Controllers.EnginesController.Index(string sortOrder) in EnginesController.cs
            return View(await context.ToListAsync());
NullReferenceException:对象引用未设置为对象的实例。
lambda_法(关闭,公司)
Microsoft.EntityFrameworkCore.Metadata.Internal.ClrPropertyGetter.GetClrValue(对象实例)
Microsoft.EntityFrameworkCore.Storage.Internal.TypeMappedPropertyRelationalParameter.AddDbParameter(DbCommand命令,对象值)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalParameterBase.AddDbParameter(DbCommand命令,IReadOnlyDictionary参数值)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.CreateCommand(IRelationalConnection连接,IReadOnlyDictionary参数值)
Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteAsync(IRelationalConnection连接、DbCommandMethod executeMethod、iRelationAllyDictionary参数值、CancellationToken CancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable+AsyncEnumerator.BufferlessMovenText(DbContext,布尔缓冲区,CancellationToken CancellationToken)
Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync(状态、函数操作、函数验证成功、取消令牌取消令牌)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable+AsyncEnumerator.MoveNext(CancellationToken CancellationToken)
System.Linq.AsyncEnumerable+SelectEnumerableAsyncCiterator.MoveNextCore(CancellationToken CancellationToken)
System.Linq.AsyncEnumerable+AsyncIterator.MoveNext(CancellationToken CancellationToken)
Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider+ExceptionInterceptor+EnumeratorExceptionInterceptor.MoveNext(CancellationToken CancellationToken)
System.Linq.AsyncEnumerable.Aggregate_389;(IAsyncEnumerable源、TAccumulate种子、Func累加器、Func结果选择器、CancellationToken CancellationToken)
EnginesController.cs中的InstantBSI.Controllers.EnginesController.Index(字符串排序器)
返回视图(wait context.ToListAsync());
我的发动机等级:

    public int Id { get; set; }
    public int CompanyId { get; set; }
    public Company Company { get; set; }
    [Display(Name = "Engine Type")]
    public int EngineTypeId { get; set; }
    public EngineType EngineType { get; set; }
    public List<Inspection> Inspections { get; set; }

    [Display(Name = "Serial Number")]
    public long SerialNumber { get; set; }
    [Display(Name = "License Number")]
    [DisplayFormat(NullDisplayText = "N/A")]
    public long LicenseNumber { get; set; }
    [Display(Name = "Total Flight Cycles")]
    public int TotalFlightCycles { get; set; }
    [Display(Name = "Total Flight Hours")]
    public int TotalFlightHours { get; set; }
    [Required]
    [Display(Name = "Aircraft Maintenence Manual")]
    public string AircraftMaintenenceManual { get; set; }
public int Id{get;set;}
public int CompanyId{get;set;}
上市公司{get;set;}
[显示(Name=“发动机类型”)]
public int EngineTypeId{get;set;}
公共EngineType EngineType{get;set;}
公共列表检查{get;set;}
[显示(名称=“序列号”)]
公共长序列号{get;set;}
[显示(名称=“许可证号码”)]
[DisplayFormat(NullDisplayText=“N/A”)]
公共长许可证号码{get;set;}
[显示(Name=“总飞行周期”)]
公共整数TotalFlightCycles{get;set;}
[显示(Name=“总飞行小时数”)]
公共int TotalFlightHours{get;set;}
[必需]
[显示(Name=“飞机维护手册”)]
公共字符串AircraftMaintenanceManual{get;set;}

结果是我的引擎表中有CompanyId而不是CompanyId。我所要做的就是把它改成:

var context = _context.Engine
            .Include(e => e.EngineType)
            .Where(e => e.CompanyId == user.CompanyId);

您确定用户不是空的吗?另外,检查引擎类型字段是否不是空的,或者是否标记为可空,如果applies@rekiem87用户绝对不是空的。它用于登录,我可以在代码块中从中提取属性。EngineType也不可为null。我会发布类和错误,我猜你的引擎和你的客户确实有一个有效的公司?它有。我想我明白了。我会在下面回答。奇怪,你应该能够使用完整的对象来进行查询,但很高兴这起到了作用,不要忘记将你的答案标记为已接受,这样每个人都知道谢谢帮助@rekiem87。这真的很奇怪,@rekiem87,但我可以确认它目前仍然以这种方式工作。我无法直接使用完整对象进行查询。在我的例子中,使用EF Core v2.2。