Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat 'Hantar ke Int32 Gagal' dalam Pertanyaan LINQ dengan Nilai Null?
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>
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>
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>
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!