Menyelesaikan masalah Ralat "Kaedah ToString() Tidak Diiktiraf" dalam LINQ kepada Entiti
Apabila bekerja dengan LINQ kepada Entiti, anda mungkin menghadapi ralat "LINQ kepada Entiti tidak mengenali kaedah 'System.String ToString()'." Ini berlaku kerana LINQ kepada Entiti bergelut untuk menterjemah kaedah ToString()
ke dalam pertanyaan serasi pangkalan data. Penyelesaiannya melibatkan mengelakkan penggunaan langsung ToString()
dalam pertanyaan LINQ.
Berikut ialah contoh kod yang disemak semula yang menangani isu ini:
<code class="language-csharp">using (var context = new Context()) { // ... foreach (var item in collection) { string strItem = item.Key.ToString(); // Assign ToString() result to a variable IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
Dengan pra-menyerahkan hasil item.Key.ToString()
kepada pembolehubah strItem
, kami memintas masalah terjemahan. Klausa where
kini menggunakan literal rentetan, yang boleh dikendalikan oleh pembekal LINQ kepada Entiti dengan berkesan.
Pendekatan Alternatif: Memanfaatkan SqlFunctions
Rangka Kerja Entiti menawarkan SqlFunctions
kelas pembantu, menyediakan fungsi khusus pangkalan data. Ini menawarkan penyelesaian yang lebih elegan untuk kes seperti ini. Kaedah SqlFunctions.StringConvert
membenarkan penukaran dalam pertanyaan pangkalan data itu sendiri.
Berikut ialah cara untuk melaksanakan penyelesaian ini:
<code class="language-csharp">using (var context = new Context()) { // ... foreach (var item in collection) { IQueryable<entity> pages = from p in context.pages where SqlFunctions.StringConvert((double?)p.Serial) == item.Key.ToString() //Note the cast to (double?) if needed select p; foreach (var page in pages) { DataManager.AddPageToDocument(page, item.Value); } } Console.WriteLine("Done!"); Console.Read(); }</code>
Pendekatan ini mengekalkan penukaran rentetan dalam pertanyaan pangkalan data, meningkatkan kecekapan dan mengelakkan ralat terjemahan. Ambil perhatian bahawa SqlFunctions.StringConvert
selalunya memerlukan penghantaran medan pangkalan data kepada jenis yang sesuai (cth., (double?)p.Serial
jika p.Serial
ialah jenis angka). Laraskan pelakon seperti yang diperlukan untuk memadankan skema pangkalan data anda. Kaedah ini biasanya lebih disukai untuk prestasi yang lebih baik dan kod yang lebih bersih.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Pengecualian 'LINQ kepada Entiti tidak mengenali kaedah 'System.String ToString()'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!