如何仅在具有值的记录中搜索(LINQ)

h4cxqtbf  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(120)

我有这部分代码:

int[] toRemoveInChildHotelOffersMealsIds = _hotelOfferDetailsRepository.Get()
                .Where(x => toRemoveHotelOfferMealsIds.Contains(x.ParentId.Value))
                .Select(x => x.ID)
                .ToArray();

此代码必须返回要删除的子ID(如果存在)。
并且此部分引发错误
可为Null的对象必须有值
第二件事我不明白为什么我在真实的工作中没有得到同样的异常。
那么,如何修改代码以避免此异常,并仅在具有值的记录中进行搜索呢?

b4qexyjb

b4qexyjb1#

这可能是因为 ParentId 的值被解析为空值,并且 ParentId.Value 引发异常。是否为 ParentId 设置了一个值,其中的数据被模拟?
要避免这种情况,请执行空值检查(假设必须忽略没有ParentId值的对象)

int[] toRemoveInChildHotelOffersMealsIds = _hotelOfferDetailsRepository.Get()
                    .Where(x => x.ParentId.HasValue ? toRemoveHotelOfferMealsIds.Contains(x.ParentId.Value) : false)
                    .Select(x => x.ID)
                    .ToArray();

如果需要考虑它们,则使用

int[] toRemoveInChildHotelOffersMealsIds = _hotelOfferDetailsRepository.Get()
                    .Where(x => !x.ParentId.HasValue || toRemoveHotelOfferMealsIds.Contains(x.ParentId.Value))
                    .Select(x => x.ID)
                    .ToArray();

相关问题