Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengelakkan Ralat 'Hantar Gagal' Apabila Menjumlahkan Integer Boleh Null dalam LINQ?

Bagaimana untuk Mengelakkan Ralat 'Hantar Gagal' Apabila Menjumlahkan Integer Boleh Null dalam LINQ?

Linda Hamilton
Linda Hamiltonasal
2025-01-10 20:56:45666semak imbas

How to Avoid

Mengendalikan nilai nol dalam pertanyaan LINQ: menyelesaikan ralat "Penukaran gagal"

Apabila melaksanakan pertanyaan LINQ, pembangun mungkin menghadapi ralat: "Tidak boleh menukar kepada jenis nilai 'Int32' kerana nilai terwujud adalah batal Isu ini berlaku apabila cuba menukar nilai yang boleh dibatalkan kepada jam jenis nilai tidak boleh dibatalkan." .

Pertanyaan LINQ berikut menggambarkan situasi ini:

<code>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>

Pertanyaan ini mengira jumlah lajur Amaun untuk ID pengguna tertentu dalam jadual CreditHistory. Walau bagaimanapun, jika tiada rekod untuk pengguna yang ditentukan dalam jadual CreditHistory, ungkapan ch.Amount mengembalikan nol. Nilai nol ini tidak boleh ditukar kepada jenis nilai tidak boleh dibatalkan Int32, mengakibatkan ralat.

Penyelesaian: Mengendalikan nilai nol

Untuk mengendalikan nilai nullable dalam pertanyaan LINQ, terdapat dua pendekatan yang mungkin:

  1. Gunakan DefaultIfEmpty: Kaedah ini menambah nilai lalai pada hasil pertanyaan jika tiada baris dikembalikan. Dalam senario yang diberikan, pertanyaan boleh diubah suai kepada:
<code>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).DefaultIfEmpty(0).Sum();</code>
  1. Menggunakan operator bersyarat (??): Operator bersyarat (??) membenarkan anda untuk menentukan nilai lalai untuk digunakan sekiranya keputusan batal. Pertanyaan boleh ditulis semula sebagai:
<code>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>

Dalam versi ini, ungkapan (int?)ch.Amount secara eksplisit menukar nilai kepada int?, menunjukkan bahawa ia boleh menjadi batal. Operator seterusnya menggantikan mana-mana nilai nol dengan nilai lalai 0.

Dengan melaksanakan salah satu daripada dua kaedah ini, pertanyaan boleh berjaya mengendalikan nilai nol dan mengembalikan hasil yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat 'Hantar Gagal' Apabila Menjumlahkan Integer Boleh Null dalam LINQ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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