Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyelesaikan Ralat 'Hantar ke Int32 Gagal' dalam Pertanyaan LINQ dengan Nilai Null?

Bagaimana untuk Menyelesaikan Ralat 'Hantar ke Int32 Gagal' dalam Pertanyaan LINQ dengan Nilai Null?

Mary-Kate Olsen
Lepaskan: 2025-01-10 20:41:45
asal
560 orang telah melayarinya

How to Resolve

Mengendalikan nilai nol dalam pertanyaan LINQ: menyelesaikan ralat "Tidak boleh menukar kepada Int32"

Apabila anda menghadapi ralat "Tidak boleh menukar kepada jenis nilai 'Int32' kerana nilai terwujud adalah nol" dalam pertanyaan LINQ, ia menunjukkan ketidakpadanan antara jenis bukan nol yang dijangkakan dan kemungkinan kehadiran nilai nol dalam keputusan pertanyaan.

Pertanyaan asal:

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID                                        
                  where u.ID == userID
                  select ch.Amount).Sum();</code>
Salin selepas log masuk

Soalan:

Pertanyaan ini mendapatkan semula jumlah ch.Amount untuk pengguna dengan ID pengguna tertentu. Walau bagaimanapun, jika tiada rekod untuk pengguna tersebut dalam jadual CreditHistory, pertanyaan akan cuba menukar nilai nol dalam hasil pangkalan data kepada Int32, menyebabkan ralat.

Penyelesaian:

Untuk menampung nilai nol, penyelesaian termasuk memperkenalkan jenis nullable dan mengendalikan kes null dengan sewajarnya.

Gunakan jenis nullable:

Mula-mula, tukar ungkapan dalam klausa pilih kepada jenis boleh batal, seperti int?. Ini akan memberitahu pengkompil bahawa harta itu mungkin mengandungi nilai nol:

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID                                        
                  where u.ID == userID
                  select (int?)ch.Amount).Sum();</code>
Salin selepas log masuk

Gunakan operator penggabungan nol (??):

Seterusnya, gunakan operator ?? untuk mengendalikan kes nol. Ia menyemak sama ada ungkapan kosong dan mengembalikan nilai lalai (dalam kes ini 0):

<code class="language-csharp">var creditsSum = (from u in context.User
                  join ch in context.CreditHistory on u.ID equals ch.UserID                                        
                  where u.ID == userID
                  select (int?)ch.Amount).Sum() ?? 0;</code>
Salin selepas log masuk

Dengan memasukkan pengubahsuaian ini, pertanyaan boleh mengendalikan nilai nol dengan anggun dan mengembalikan hasil yang sesuai, menghalang ralat penukaran.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Hantar ke Int32 Gagal' dalam Pertanyaan LINQ dengan Nilai Null?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan