Rumah >pembangunan bahagian belakang >C++ >Mengapakah LINQ kepada Entiti Melemparkan Pengecualian 'Kaedah 'System.String ToString()' Not Recognized' dan Bagaimana Saya Boleh Membetulkannya?
Ralat LINQ kepada Entiti: ToString()
Kaedah Tidak Disokong
Menghijrahkan data antara pangkalan data seperti MySQL dan SQL Server kadangkala boleh mencetuskan ralat LINQ kepada Entiti ini:
"LINQ to Entiti tidak mengenali kaedah 'System.String ToString()' dan kaedah ini tidak boleh diterjemahkan ke dalam ungkapan kedai."
Ini berlaku apabila anda cuba membandingkan rentetan dengan medan pangkalan data menggunakan kaedah ToString()
dalam pertanyaan LINQ. Masalahnya ialah ToString()
bukan fungsi SQL standard dan LINQ kepada Entiti tidak boleh menterjemahkannya ke dalam kod SQL yang setara.
Penyelesaian: Menggunakan Pembolehubah Sementara
Penyelesaian yang paling mudah ialah menyimpan hasil rentetan ToString()
dalam pembolehubah sebelum menggunakannya dalam pertanyaan LINQ anda:
<code class="language-csharp">var strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
Ini mengelakkan penggunaan langsung ToString()
dalam ungkapan LINQ, menyelesaikan isu terjemahan.
Alternatif: Menggaji SqlFunctions
Dalam senario tertentu, kelas pembantu SqlFunctions
menyediakan alternatif. Ia menawarkan fungsi khusus pangkalan data yang LINQ kepada Entiti boleh terjemah:
<code class="language-csharp">IQueryable<entity> pages = from p in context.pages where p.Serial == SqlFunctions.StringConvert(item.Key) select p;</code>
SqlFunctions.StringConvert()
melakukan penukaran serupa kepada ToString()
tetapi dengan cara yang serasi dengan dialek SQL pangkalan data.
Penjelasan:
Isu teras terletak pada cara LINQ kepada Entiti memproses ungkapan. Ia tidak melaksanakan ToString()
secara langsung; sebaliknya, ia cuba menterjemahkan keseluruhan ungkapan ke dalam SQL. Oleh kerana tiada persamaan SQL langsung untuk ToString()
, terjemahan gagal, membawa kepada pengecualian. Penyelesaian di atas memintas ini dengan sama ada pra-memproses rentetan atau menggunakan fungsi serasi pangkalan data.
Atas ialah kandungan terperinci Mengapakah LINQ kepada Entiti Melemparkan Pengecualian 'Kaedah 'System.String ToString()' Not Recognized' dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!