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!