Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengendalikan Nilai Null dalam Pertanyaan LINQ untuk Mengelakkan Kegagalan Cast?

Bagaimana Mengendalikan Nilai Null dalam Pertanyaan LINQ untuk Mengelakkan Kegagalan Cast?

Patricia Arquette
Patricia Arquetteasal
2025-01-10 20:46:41943semak imbas

How to Handle Null Values in LINQ Queries to Avoid Cast Failures?

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!

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