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
Lepaskan: 2025-01-10 20:46:41
asal
946 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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