Rumah >pembangunan bahagian belakang >C++ >Mengapa Rangka Kerja Entiti Membuang 'Ungkapan lambda dengan badan penyata tidak boleh ditukar kepada pepohon ungkapan'?

Mengapa Rangka Kerja Entiti Membuang 'Ungkapan lambda dengan badan penyata tidak boleh ditukar kepada pepohon ungkapan'?

Linda Hamilton
Linda Hamiltonasal
2024-12-31 08:45:13865semak imbas

Why Does Entity Framework Throw

Ralat: "Ungkapan lambda dengan badan penyata tidak boleh ditukar kepada pepohon ungkapan" apabila menggunakan EntityFramework

Apabila menggunakan kaedah Pilih EntityFramework , anda mungkin menghadapi ralat: "Ungkapan lambda dengan badan pernyataan tidak boleh ditukar kepada pepohon ungkapan." Ralat ini sering berlaku apabila ungkapan lambda yang anda berikan mengandungi badan pernyataan dan bukannya ungkapan ringkas.

Memahami Ralat:

Dalam coretan kod yang disediakan:

Obj[] myArray = objects.Select(o =>
{
    var someLocalVar = o.someVar;

    return new Obj() {
    Var1 = someLocalVar,
    Var2 = o.var2 };
});

Ungkapan lambda menggunakan badan pernyataan untuk mengisytiharkan dan menggunakan pembolehubah setempat someLocalVar sebelum mengembalikan tika Obj. Walau bagaimanapun, EntityFramework mengharapkan ungkapan ringkas yang boleh diterjemahkan terus ke dalam SQL untuk pelaksanaan pangkalan data yang cekap.

Penyelesaian:

Untuk menyelesaikan ralat ini, mudahkan ungkapan lambda dengan mengalih keluar badan penyata dan memberikan nilai secara langsung:

Arr[] myArray = objects.Select(o => new Obj() {
    Var1 = o.someVar,
    Var2 = o.var2 
});

Dengan pengubahsuaian ini, ungkapan lambda hanya mengandungi ungkapan ringkas yang boleh diterjemahkan ke dalam pepohon ungkapan dan kod tersebut akan berjaya dikompil.

Atas ialah kandungan terperinci Mengapa Rangka Kerja Entiti Membuang 'Ungkapan lambda dengan badan penyata tidak boleh ditukar kepada pepohon ungkapan'?. 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