Rumah > pembangunan bahagian belakang > C++ > Mengapakah LINQ kepada Entiti Melemparkan Pengecualian 'Kaedah Tidak Diiktiraf' Apabila Menggunakan ToString()?

Mengapakah LINQ kepada Entiti Melemparkan Pengecualian 'Kaedah Tidak Diiktiraf' Apabila Menggunakan ToString()?

Patricia Arquette
Lepaskan: 2025-01-22 09:11:09
asal
941 orang telah melayarinya

Why Does LINQ to Entities Throw a

LINQ kepada Entiti: Menangani Pengecualian "Kaedah Tidak Diiktiraf"

Penghijrahan pangkalan data selalunya membawa kepada masalah pengecaman kaedah. Ralat biasa ialah:

"LINQ to Entities tidak mengenali kaedah 'System.String ToString()' dan kaedah ini tidak boleh diterjemahkan ke dalam ungkapan kedai."

Ini biasanya berlaku apabila membandingkan sifat rentetan dengan ungkapan rentetan, seperti ini:

<code>IQueryable<entity> pages =
    from p in context.pages
    where p.Serial == item.Key.ToString()
    select p;</code>
Salin selepas log masuk

Memahami Punca Punca:

Kaedah ToString() tidak dilaksanakan secara langsung tetapi dianggap sebagai MethodGroup. LINQ cuba menterjemah kumpulan ini ke dalam ungkapan SQL yang setara. Jika pangkalan data sasaran tidak mempunyai persamaan ToString() langsung, terjemahan gagal.

Penyelesaian: Pra-Menyimpan Nilai Rentetan:

Pembetulan paling mudah ialah menyimpan hasil rentetan dalam pembolehubah sebelum perbandingan:

<code>string strItem = item.Key.ToString();

IQueryable<entity> pages =
    from p in context.pages
    where p.Serial == strItem
    select p;</code>
Salin selepas log masuk

Ini mengalih keluar panggilan ToString() daripada pertanyaan, menghalang ralat terjemahan.

Alternatif: Memanfaatkan SqlFunctions:

Kelas pembantu SqlFunctions menawarkan fungsi khusus pangkalan data untuk pertanyaan LINQ kepada Entiti. Untuk ToString(), anda boleh mencuba:

<code>IQueryable<entity> pages =
    from p in context.pages
    where SqlFunctions.StringConvert((decimal?)p.Serial) == item.Key
    select p;</code>
Salin selepas log masuk

Perhatikan pelakon kepada (decimal?) yang selalunya diperlukan bergantung pada jenis pangkalan data asas p.Serial. SqlFunctions boleh menyelaraskan kod dan mengelakkan pembolehubah sementara, tetapi memerlukan pertimbangan teliti jenis data.

Atas ialah kandungan terperinci Mengapakah LINQ kepada Entiti Melemparkan Pengecualian 'Kaedah Tidak Diiktiraf' Apabila Menggunakan ToString()?. 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