Rumah >pembangunan bahagian belakang >C++ >Mengapa LINQ kepada Entiti Tidak Menyokong Kaedah ToString() dan Bagaimana Saya Boleh Membetulkannya?
Menyelesaikan masalah LINQ kepada Entiti dan Kaedah ToString()
Artikel ini menangani ralat biasa yang dihadapi apabila menggunakan LINQ kepada Entiti dengan Rangka Kerja Entiti: "LINQ kepada Entiti tidak mengenali kaedah 'System.String ToString()' dan kaedah ini tidak boleh diterjemahkan ke dalam ungkapan kedai."
Masalahnya:
Isu teras terletak pada ketidakserasian antara kaedah ToString()
dan proses terjemahan LINQ kepada Entiti. Apabila pertanyaan LINQ yang mengandungi ToString()
diterjemahkan ke dalam SQL untuk pelaksanaan pangkalan data, Rangka Kerja Entiti tidak dapat mencari persamaan SQL yang sepadan. Ini biasanya berlaku dalam klausa where
, seperti p.Serial == item.Key.ToString()
.
Penyelesaian 1: Pra-Penukaran kepada Rentetan
Satu pendekatan berkesan melibatkan pelaksanaan ToString()
penukaran sebelum pertanyaan LINQ dilaksanakan. Ini memastikan penukaran berlaku dalam memori (C#) dan bukannya dalam pangkalan data (SQL).
<code class="language-csharp">string strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
Kaedah ini memisahkan penukaran data dengan jelas daripada pertanyaan pangkalan data.
Penyelesaian 2: Menggunakan SqlFunctions
(Kelas Pembantu Rangka Kerja Entiti)
Penyelesaian yang lebih elegan, terutamanya berguna dalam versi Rangka Kerja Entiti kemudian, memanfaatkan kelas SqlFunctions
. Kelas ini menawarkan fungsi yang memetakan kepada rakan SQL, menyediakan terjemahan langsung untuk ungkapan yang sebaliknya gagal. Untuk penukaran rentetan, gunakan SqlFunctions.StringConvert
:
<code class="language-csharp">IQueryable<entity> pages = from p in context.pages where p.Serial == SqlFunctions.StringConvert((double)item.Key) select p;</code>
Perhatikan pelakon yang jelas kepada double
dalam contoh ini. Jenis tepat yang diperlukan bergantung pada jenis data asas item.Key
. Anda mungkin perlu melaraskan pelakon mengikut jenis data khusus anda. Penyelesaian ini secara amnya lebih disukai kerana ringkas dan integrasi langsung dengan mekanisme terjemahan Rangka Kerja Entiti. Ia mengelakkan keperluan untuk pembolehubah yang berasingan.
Atas ialah kandungan terperinci Mengapa LINQ kepada Entiti Tidak Menyokong Kaedah ToString() dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!