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

时间:2013-06-18 16:22:50

标签: 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();

4 个答案:

答案 0 :(得分:31)

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

答案 1 :(得分:10)

编译器告诉您j.job_quote.JobQuoteID的类型为intint不能为null,因为它是不可为空的值类型。无法在不可为空的类型上调用??运算符。

答案 2 :(得分:4)

这是null-coalescing运算符,它只适用于可空类型,或者说左手边必须是可空类型(我的语言可能有错,但当我说可空时我的意思是所有Nullable<T>'和参考类型)。如果您使用int?代替int,那么它可以正常运行。运算符是二进制的,并且工作原理如此; a ?? b表示如果a为null,则使用b作为值。您可以根据需要多次链接。所以我可以做int willNeverBeNull = a ?? b ?? c ?? 4假设a,b和c都是可以为空的int,它将采用第一个非null值。

答案 3 :(得分:0)

由于@Servy说问题不在于JobQuoteID,我认为错误正在发生,因为你的job_quote对象为空,因此表达式应为:

JobQuoteID = (j.job_quote ?? new job_quote { JobQuoteID = 0 }).JobQuoteID

希望这能解决您的问题。