【发布时间】:2021-10-13 05:54:21
【问题描述】:
当我运行以下 Linq 时:
var selectedProduct = db.Products.FirstOrDefault(a => a.ProductNr == productNr)?.Id;
model.PackTypes = db.Zones
.Where(az => az.ProductId == selectedProduct && az.StoragePrio > 0)
.ToList()
.DistinctBy(p => p.PackType)
.OrderBy(x => x.PackType)
.Select(x => new DropdownItemViewModel<int>
{
Id = (int)x.PackType,
Name = x.PackType.Translate()
});
return true;
我收到此错误:
System.InvalidOperationException: 'Nullable 对象必须有一个值。'在此代码 Id = (int)x.PackType,
现在我知道我必须做一个空检查,所以我尝试了这个:
if (x.PackType != null)
return new DropdownItemViewModel<int>
{
Id = (int)x.PackType,
Name = x.PackType.Translate()
};
return null;
仍然不起作用,我的意思是我仍然有 NullCheck 的问题。
【问题讨论】:
-
型号....请。
-
az.ProductId可以在某个时候成为null吗?如果没有,您为什么要进行该查询,而不是在selectedProduct == null时提前退出? -
为什么在构建链式延迟方法查询的过程中调用 ToList?什么是 PackType 类型?是否可以使用简单的强制转换将其转换为整数?
-
您似乎希望
.Where(az => az.ProductId == selectedProduct && az.StoragePrio > 0 && az.PackType != null)过滤掉所有包含az.PackType == null的条目。除非这里有其他为空的东西? -
如果你想在
Where之后强制 Linq-To-Objects 不要使用ToList而是AsEnumerable。这样,您不会一次将所有内容加载到内存中,但您可以使用延迟执行。
标签: c# linq nullreferenceexception