Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat 'LINQ kepada Entiti tidak mengenali kaedah 'Double.Parse''?
Ralat ini berlaku apabila cuba menjalankan ungkapan LINQ yang mengandungi kaedah yang tidak disokong oleh enjin pangkalan data untuk Rangka Kerja Entiti. Dalam kes ini, kaedah yang menyebabkan ralat ialah Double.Parse(string).
Dalam kod yang disediakan, ralat ditemui dalam pernyataan berikut:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : Double.Parse(m.Question1)).Average());
Rangka Kerja Entiti menterjemah ungkapan LINQ ke dalam pertanyaan SQL untuk dilaksanakan pada pangkalan data. Walau bagaimanapun, kaedah Double.Parse bukan fungsi SQL standard dan tidak boleh ditukar terus kepada SQL.
Untuk menyelesaikan isu ini, anda boleh menentukan fungsi tersuai dalam Entiti anda Model rangka kerja yang boleh diterjemahkan ke dalam ungkapan SQL yang setara. Dalam kes ini, kami akan mentakrifkan fungsi yang dipanggil ParseDouble.
Buka fail *.edmx untuk model anda dan cari
<Function Name="ParseDouble" ReturnType="Edm.Double"> <Parameter Name="stringvalue" Type="Edm.String" /> <DefiningExpression> cast(stringvalue as Edm.Double) </DefiningExpression> </Function>
Seterusnya, buat kelas separa untuk kelas ObjectContext anda dan tambahkan kaedah berikut padanya:
using System.Data.Objects.DataClasses; public partial class YourObjectContext { /// <summary> /// This method exists for use in LINQ queries, /// as a stub that will be converted to a SQL CAST statement. /// </summary> [EdmFunction("YourModel", "ParseDouble")] public static double ParseDouble(string stringvalue) { return Double.Parse(stringvalue); } }
Setelah anda menentukan dan melaksanakan fungsi tersuai, anda boleh mengemas kini ungkapan LINQ anda untuk menggunakannya:
model.Referring = Math.Round(_newSurveyResult.Select(m => string.IsNullOrEmpty(m.Question1) ? 0 : YourObjectContext.ParseDouble(m.Question1)).Average());
Kini, ungkapan LINQ harus berjaya diterjemahkan ke dalam pertanyaan SQL yang boleh dilaksanakan oleh enjin pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'LINQ kepada Entiti tidak mengenali kaedah 'Double.Parse''?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!