Rumah >pembangunan bahagian belakang >C++ >Mengapakah LINQ kepada Entiti Melemparkan Pengecualian 'Kaedah Tidak Diiktiraf' Apabila Menggunakan ToString()?
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!