提问人:Lidprogsky 提问时间:8/9/2021 最后编辑:Lidprogsky 更新时间:8/9/2021 访问量:332
LINQ 表达式中的 System.InvalidOperationException 问题
System.InvalidOperationException issue in LINQ expression
问:
当我运行以下 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 object must have a value.' 在此代码上 Id = (int)x.PackType,
现在我知道我必须做一个空检查,所以我试过这个:
if (x.PackType != null)
return new DropdownItemViewModel<int>
{
Id = (int)x.PackType,
Name = x.PackType.Translate()
};
return null;
仍然不起作用,我的意思是我仍然对 NullCheck 有问题。
答:
2赞
Svyatoslav Danyliv
8/9/2021
#1
此查询更有效,不应包含所有提到的错误:
var query =
from p in db.Products
where p.ProductNr == productNr
join az in db.Zones on p.Id equals az.ProductId
where az.StoragePrio > 0 && az.PackType != null
select new { az.PackType };
model.PackTypes = query
.Distinct()
.OrderBy(x => x.PackType)
.Select(x => new DropdownItemViewModel<int>
{
Id = (int)x.PackType,
Name = x.PackType.Translate()
})
.ToList();
此查询只发送一个数据库请求,而不是两个数据库请求。此外,所有操作都在服务器端完成。
评论
1赞
Peter Csala
8/9/2021
也请提供一些解释。
评论
az.ProductId
null
selectedProduct == null
.Where(az => az.ProductId == selectedProduct && az.StoragePrio > 0 && az.PackType != null)
az.PackType == null
Where
ToList
AsEnumerable