简体   繁体   English

如何检查 LINQ 中是否有 null 值?

[英]how to check if there is a null value inside LINQ?

CarrierDetailViewModel.SiteOptionModel , this sometimes has a null value, then it throws the error like the below. CarrierDetailViewModel.SiteOptionModel ,这有时有一个 null 值,然后它会抛出如下错误。 Is there any way to check if there is no truck.SiteId then make it null otherwise assign value.有什么方法可以检查是否没有truck.SiteId然后将其设为 null 否则赋值。 How can I stop throwing the error but make it null when truck.SiteId is null.truck.SiteId为 null 时,我怎样才能停止抛出错误但使其成为 null。

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
       }
   } ;

Error错误

System.InvalidOperationException: 'Nullable object must have a value System.InvalidOperationException: 'Nullable object 必须有一个值

I would create a method, eg CreateTruckModel2我会创建一个方法,例如CreateTruckModel2

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

and

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
        }
    };
}

Or just skip those with a where condition?或者只是跳过具有 where 条件的那些?

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
       }
   } ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM