2013-06-18 7 views
2

У меня есть этот запрос beloq, который дает мне исключение. Теперь j.job_quote.JobQuoteID является столбцом идентификаторов, которые Null, ЧГ пытается создать чек, если нуль, то определить, как 0. Пожалуйста помогите, почему я получаю эту проблему и то, что я могу сделать, чтобы справиться с этимОператор '??' не может применяться к операндам типа 'int' и 'int'

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(); 

ответ

24

Variable на левой стороне ?? оператора должен быть обнуляемыми (что означает, что вы можете Ассинг нуля к нему), в вашем случае JobQuoteID должен быть типа int? не int

10

компилятор говорит вам, что j.job_quote.JobQuoteID имеет типа int , Значение int не может быть нулевым, так как оно является типом непустого значения. Оператор ?? не может быть вызван типом, который не является нулевым.

4

Это оператор с нулевым коалесцированием, он применим только к типам с нулевым значением, или, скорее, левая сторона должна быть нулевым типом (мой язык может быть неправильным, но когда я говорю об ошибке с нулевым значением, я имею в виду все Nullable<T> и ссылку типов). Если бы у вас было int? вместо int, это сработало бы. Оператор двоичный и работает так; a ?? b говорит, что если a имеет значение null, то используйте значение b для значения. Вы можете связать это столько раз, сколько захотите. Таким образом, я мог бы сделать int willNeverBeNull = a ?? b ?? c ?? 4, предполагая, что a, b и c являются целыми числами с нулевым значением, оно будет принимать первое ненулевое значение.

0

Как @Servy сказал вопрос не с JobQuoteID вместо этого я думаю, что ошибка происходит потому, что ваш job_quote объект имеет нулевое значение, таким образом, выражение должно быть:

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

Надеется, что это будет исправить вашу проблему.

Смежные вопросы