首页 > 解决方案 > .Single(c.=>c.Id==id) 方法返回 NULL

问题描述

我对下面的代码有疑问。第一次搜索 (loadToUpdate1) 正在工作。它返回值。CustomerId 也有一个值(在调试模式下为 4)。具有此 ID 的客户存在。它在那里(在调试模式下,我可以在客户列表中看到这个 ID 为 4 的客户)。但是为什么 customerToUpdate1 返回 NULL?起初我认为它们(Id 和 CustomerId)是不同的数据类型。但它们都是整数。为什么 .Single(c => c.Id == customerId) 不起作用?任何想法?UPD。我尝试了 First 而不是 Single,但结果是相同的(NULL)。

var loadToUpdate1 = _context.LoadConfirmations.Include(c=>c.Customer).Single(c => c.Id == loadFormViewModel.LoadConfirmation.Id);

var customerId = loadToUpdate1.CustomerId;
var customerToUpdate1 = _context.Customers.Single(c => c.Id == customerId);

在此处输入图像描述

在此处输入图像描述

标签: c#entity-frameworklinq

解决方案


在您的调试图像中,您实际上还没有执行查询。您需要进入下一行以someCustomer设置 的值。

IfsomeCustomer可以为 null ,而不是您需要使用SingleOrDefault.

First将返回 1:N 的第一个结果。如果有 0 个结果则抛出异常

FirstOrDefault将返回 null,或 0:N 的第一个结果

Single将返回 1:1 的第一个结果。如果有 0 个或多于 1 个结果,则引发异常

SingleOrDefault将返回 null,或 0:1 的第一个结果


推荐阅读