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
Patricia Arquetteasal
2025-01-22 09:11:09902semak imbas

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>

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>

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>

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!

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