Как проверить, есть ли нулевое значение внутри LINQ? - PullRequest
0 голосов
/ 22 апреля 2020

CarrierDetailViewModel.SiteOptionModel, иногда имеет нулевое значение, затем выдает ошибку, как показано ниже. Есть ли способ проверить, нет ли truck.SiteId, тогда сделать его нулевым, в противном случае присвойте значение. Как я могу перестать выдавать ошибку, но сделать ее нулевой, если truck.SiteId равно нулю.

from truck in database.Truck
   where truck.CarrierId == carrierId
         && (truck.IsDeleted == null || truck.IsDeleted == false)
   orderby truck.Code
   select new CarrierDetailViewModel.TruckModel2
   {
       Id = truck.TruckId,

       Site = new CarrierDetailViewModel.SiteOptionModel{
            Id = (int)truck.SiteId,
            Name = truck.Site.Name,
            Code = truck.Site.Code
       }
   } ;

Ошибка

System.InvalidOperationException: 'Обнуляемый объект должен иметь значение

1 Ответ

0 голосов
/ 22 апреля 2020

Я бы создал метод, например, CreateTruckModel2

from truck in database.Truck
where truck.CarrierId == carrierId
     && (truck.IsDeleted == null || truck.IsDeleted == false)
orderby truck.Code
select CreateTruckModel2(truck);

и

public TruckModel2 CreateTruckModel2(Truck truck)
{
    if(truck?.SiteId == null)
    {
        return null;
    }

    return new CarrierDetailViewModel.TruckModel2
    {
        Id = truck.TruckId,

        Site = new CarrierDetailViewModel.SiteOptionModel{
            Id = (int)truck.SiteId,
            Name = truck.Site.Name,
            Code = truck.Site.Code
        }
    };
}

Или просто пропустите те с условием где?

from truck in database.Truck
   where truck.CarrierId == carrierId
         && (truck.IsDeleted == null || truck.IsDeleted == false)
         && truck.SiteId != null
   orderby truck.Code
   select new CarrierDetailViewModel.TruckModel2
   {
       Id = truck.TruckId,

       Site = new CarrierDetailViewModel.SiteOptionModel{
            Id = (int)truck.SiteId,
            Name = truck.Site.Name,
            Code = truck.Site.Code
       }
   } ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...