接线员'??' 不能应用于'int'和'int'类型的操作数

Sha*_*Sen 9 c# linq

我有这个beloq查询给了我一个例外.现在j.job_quote.JobQuoteID是一个null的标识列,我们试图创建一个检查,如果null然后标识为0.请帮助我为什么我得到问题,我该怎么办来处理它

var Qryjob = (from j in at.jobs 

                     where j.JobID == Convert.ToInt32(jobid)
                     select new {
                         JobID = j.JobID,
                         InsertedDate = j.InsertedDate,
                         FirstName = j.user.FirstName,
                         LastName = j.user.LastName,
                         City = j.user.City,
                         ServiceName = j.service.ServiceName,
                         ServiceTypeName = j.service_type.ServiceTypeName,
                         BudgetName = j.budget.BudgetName,
                         IsApproved = j.IsApproved,
                         IsAssigned = j.IsAssigned,
                         IsQuoted = j.IsQuoted,
                         job_notif_price = j.job_notif_price,
                         Description = j.Description,
                         PaymentTypeName = j.payment_type.PaymentTypeName,
                         DuePeriodName = j.due_period.DuePeriodName,
                         QuoteStatus = j.job_quote.QuoteStatus,
                         JobStatus = j.job_quote.JobStatus,
                         comments = j.job_quote.comments,
                         IsPartnerApply = j.job_quote.IsPartnerApply,
                         Applycomment = j.job_quote.ApplyComments,
                         JobQuoteID = j.job_quote.JobQuoteID ?? 0
                     }).ToList();
Run Code Online (Sandbox Code Playgroud)

Zbi*_*iew 36

??运算符左侧的变量必须是可空的(这意味着您可以为它赋值为null),在您的情况下JobQuoteID应该是类型int?不是int


Ser*_*rvy 10

编译器告诉你这j.job_quote.JobQuoteID是类型int.一个int不能为空,因为它是一种非空值类型.该??运营商无法在类型不能为空被调用.


eva*_*nal 5

那是null推算运算符,它仅适用于可为null的类型,或者左侧必须为可为null的类型(我的语言在那儿可能是错误的,但是当我说可为null时,我指的是所有Nullable<T>的和引用类型)。如果int?没有,int它将起作用。该运算符是二进制的,其工作方式是这样的;a ?? b表示如果a为null,则使用b作为值。您可以随意将其链接多次。因此,我可以int willNeverBeNull = a ?? b ?? c ?? 4假设a,b和c都是可为null的int,它将采用第一个非null值。