Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengendalikan Nilai Null dalam Pertanyaan LINQ untuk Mengelakkan Kegagalan Cast?
Pengendalian nilai nol dalam pertanyaan LINQ: menyelesaikan kegagalan penukaran jenis
Apabila pertanyaan LINQ boleh mengembalikan nilai nol, ralat berikut mungkin dilemparkan: "Tidak boleh menukar jenis nilai 'Int32' kepada null. Parameter generik jenis hasil atau pertanyaan mesti menggunakan jenis boleh batal." ralat dan benarkan nilai nol, pertimbangkan pendekatan berikut:
Kaedah 1: Gunakan DefaultIfEmpty dan Sum, dan nyatakan nilai lalai
<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).DefaultIfEmpty(0).Sum();</code>
Kaedah ini menggunakan DefaultIfEmpty
untuk memasukkan nilai lalai (0 dalam kes ini) apabila tiada rekod yang sepadan dalam jadual CreditHistory
.
Kaedah 2: Tukar kepada jenis nullable dan gunakan operator
<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>
Dalam kaedah ini, pertanyaan diubah suai untuk menukar atribut Amount
kepada jenis nullable (int?
). Ini memberitahu pengkompil bahawa nilainya mungkin nol. Kemudian gunakan operator ??
untuk mengendalikan kes nilai nol dan tetapkan nilai lalai (0 dalam kes ini) jika nilainya adalah nol.
Kaedah 3: Gunakan fungsi Coalesce
<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 COALESCE(ch.Amount, 0)).Sum();</code>
Kaedah ini menggunakan fungsi COALESCE
untuk menggantikan nilai nol dengan nilai lalai yang ditentukan (0 dalam kes ini) terus dalam pertanyaan SQL.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai Null dalam Pertanyaan LINQ untuk Mengelakkan Kegagalan Cast?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!