14

私は例外を与えているこの beloq クエリを持っています。現在、j.job_quote.JobQuoteID は null の ID 列であり、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

演算子の左側の変数はnull可能でなければなりません??(つまり、nullを割り当てることができます)。JobQuoteIDint?int

于 2013-06-18T16:24:07.910 に答える
11

j.job_quote.JobQuoteIDコンパイラは、それがタイプであると言っていますint。Anintは null 非許容値型であるため、null にすることはできません。演算子は、??null 非許容型では呼び出すことができません。

于 2013-06-18T16:24:13.933 に答える
5

それはnull合体演算子であり、null許容型にのみ適用されるか、左側がnull許容型である必要があります(私の言語は間違っているかもしれませんが、null許容と言うときはすべてNullable<T>のと参照型を意味します)。int?代わりに持っていればうまくintいくでしょう。演算子はバイナリであり、そのように機能します。がnullのa ?? b場合、値にbを使用することを示しています。aこれを何回でも連鎖させることができます。したがってint willNeverBeNull = a ?? b ?? c ?? 4、a、b、および c がすべて null 許容の int であると仮定すると、最初の非 null 値が取得されます。

于 2013-06-18T16:24:14.693 に答える
0

@Servyが言ったように、問題は代わりにオブジェクトがnullでJobQuoteIDあるためにエラーが発生していると思います。したがって、式は次のようになります。job_quote

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

これで問題が解決することを願っています。

于 2013-06-18T16:27:57.457 に答える