Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyelesaikan Ralat 'LINQ kepada Entiti tidak mengenali kaedah 'Double.Parse''?

Bagaimana untuk Menyelesaikan Ralat 'LINQ kepada Entiti tidak mengenali kaedah 'Double.Parse''?

Linda Hamilton
Linda Hamiltonasal
2024-12-28 22:10:11252semak imbas

How to Resolve the

Penjelasan Ralat: "LINQ kepada Entiti tidak mengenali kaedah 'Double Parse(System.String)' dan kaedah ini tidak boleh diterjemahkan ke dalam ungkapan kedai"

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).

Butiran Masalah

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.

Definisi Fungsi Tersuai

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.

Definisi Entiti-SQL dalam Fail EDMX

Buka fail *.edmx untuk model anda dan cari unsur. Tambah definisi fungsi berikut dalam elemen:

    <Function Name="ParseDouble" ReturnType="Edm.Double">
        <Parameter Name="stringvalue" Type="Edm.String" />
        <DefiningExpression>
            cast(stringvalue as Edm.Double)
        </DefiningExpression>
    </Function>

Kaedah Tersuai dalam Kelas ObjectContext

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);
    }
}

Dikemas kini Ungkapan LINQ

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn