14

我有这个 beloq 查询,这给了我一个例外。现在 j.job_quote.JobQuoteID 是一个身份列,它为 null,thurs 试图创建一个检查是否为 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

4 回答 4

48

运算符左侧的变量??必须是可空的(这意味着您可以将空分配给它),在您的情况下JobQuoteID应该是类型int?notint

于 2013-06-18T16:24:07.910 回答
11

编译器告诉你那j.job_quote.JobQuoteID是 type int。Anint不能为空,因为它是不可为空的值类型。??不能对不可为空的类型调用运算符。

于 2013-06-18T16:24:13.933 回答
5

那是空合并运算符,它仅适用于可空类型,或者更确切地说,左侧必须是可空类型(我的语言在那里可能是错误的,但当我说可空时,我指的是所有Nullable<T>的和引用类型)。如果你有int?而不是int它会工作。运算符是二进制的,工作原理是这样的;a ?? b表示如果a为空,则使用 b 作为值。您可以根据需要多次链接它。所以我可以int willNeverBeNull = a ?? b ?? c ?? 4假设 a、b 和 c 都是可为空的整数,它将采用第一个非空值。

于 2013-06-18T16:24:14.693 回答
0

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

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

希望这能解决您的问题。

于 2013-06-18T16:27:57.457 回答