Apabila menjalankan pertanyaan LINQ yang cuba menggunakan Double.Parse pada sifat rentetan dalam konteks pangkalan data, pengguna boleh menghadapi ralat berikut:
"LINQ to Entiti tidak mengenali kaedah 'Double Parse(System.String)' dan kaedah ini tidak boleh diterjemahkan ke dalam ungkapan kedai."
Rangka Kerja Entiti (EF) direka untuk menterjemah pertanyaan LINQ ke dalam arahan SQL yang boleh dilaksanakan pada pangkalan data. Walau bagaimanapun, kaedah Double.Parse bukanlah fungsi SQL yang sah. Oleh itu, EF tidak boleh menterjemahkannya ke dalam SQL dan melaksanakan pertanyaan dengan jayanya.
Untuk menyelesaikan isu ini, anda perlu mencipta kaedah tersuai yang melakukan operasi yang sama seperti Double.Parse dan buat EF menyedarinya supaya ia boleh menterjemahkannya ke dalam SQL.
Langkah 1: Tentukan Tersuai Fungsi
Dalam fail Model Data Entiti (EDMX) yang dikaitkan dengan konteks data anda, tambahkan definisi fungsi berikut dalam
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
Fungsi ini memberitahu EF cara menukar nilai rentetan kepada nilai berganda dalam SQL.
Langkah 2: Laksanakan Kaedah Tersuai
Dalam kelas separa yang mentakrifkan konteks data anda, buat kaedah yang sepadan dengan tandatangan fungsi yang anda takrifkan dalam EDMX fail:
public partial class MyDataContext { [EdmFunction("YourModel", "ParseDouble")] public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); } }
Langkah 3: Gunakan Fungsi Tersuai dalam LINQ Query
Kini anda boleh menggunakan fungsi ParseDouble dalam pertanyaan LINQ anda:
var query = context.MyEntities .Select(e => new { DoubleValue = ParseDouble(e.StringValue) });
Dengan mengikuti langkah ini, anda boleh mendayakan EF menterjemah pertanyaan LINQ anda yang menggunakan Double.Parse ke dalam SQL yang sah, menyelesaikan ralat "LINQ to Entiti tidak mengenali kaedah".
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan 'LINQ kepada Entiti tidak mengenali kaedah 'Double Parse(System.String)''?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!