Linq возвращает объект, обнуляемый, должен иметь значение, поскольку некоторые столбцы являются пустыми

#c# #linq #asp.net-core #entity-framework-core

Вопрос:

У меня есть запрос linq в цикле. Я запрашиваю по диапазону дат, в каком-то диапазоне дат все работает и возвращается нормально. Но в каком-то другом диапазоне дат я получил «Обнуляемый объект должен иметь значение.

Я обнаружил, что некоторые значения в таблицах равны нулю

Некоторые ответы на StackOverflow предлагали игнорировать, когда столбцы пусты.

Но в моем случае я не могу игнорировать это, потому что столбец равен нулю.

Вот мой вопрос

 
                var cargoActivityResponse = await (from ca in context.CargoActivities.Where(cargo => cargo.ReservationId == task[i].BerReservationId)
                                            from cargo in context.CargoActivityTypes
                                            where ca.ActivityTypeId == cargo.Id
                                            from category in context.CargoCategories
                                            where ca.CargoCategoryId == category.Id
                                            from routes in context.TradeRoutes
                                            where ca.TradeRouteId == routes.Id
                                            select new
                                            {
                                                ActivityType = cargo.Name,
                                                Cargo = category.Name,
                                                TradeRoute = routes.Name,
                                                Quantity_Num = ca.Quantity_Num,
                                                Quantity_UOM = ca.Quantity_UOM,
                                            }).ToListAsync();
 

Как можно вернуть все, даже если какой-то столбец равен нулю или возвращает значение null?

Трассировка стека, если это будет полезно

    at System.ThrowHelper.ThrowInvalidOperationException_InvalidOperation_NoValue()
   at System.Nullable`1.get_Value()
   at Port.Info.Business.Billings.<BillingData>d__4.MoveNext() in C:UsersjohnsourcereposPort.InfoPortInfoBusinessBillings.cs:line 155
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Port.Info.Controllers.BillingsController.<BillingData>d__5.MoveNext() in C:UsersjohnsourcereposPort.InfoPortInfoControllersBillingsController.cs:line 49
 

Комментарии:

1. Вы создали схему бд с помощью кода сначала?

2. Да, код-первый

3. 1) task[I] , может быть нулевым 2) Есть ли какая-либо причина делать это в цикле? Вы можете получить все с помощью одного запроса.

4. У меня уже есть запрос, который уже возвращает список, затем я использую этот список, чтобы получить другой список. @SvyatoslavDanyliv задача[i].Идентификатор сохранения не равен нулю

5. это не повод для запуска цикла. context.CargoActivities.Where(cargo => task.Select(x => x.BerReservationId).Contains(cargo.ReservationId))