Ralat Pengkompil: "Ungkapan Lambda dengan Badan Penyata Tidak Boleh Ditukar kepada Pokok Ungkapan"
Apabila bekerja dengan EntityFramework, anda mungkin menghadapi ralat menyatakan, "Ungkapan lambda dengan badan pernyataan tidak boleh ditukar kepada pokok ungkapan." Ralat ini berlaku apabila anda cuba menggunakan ungkapan lambda dengan pernyataan blok (juga dikenali sebagai lambda pernyataan) dalam konteks yang hanya lambda ungkapan dibenarkan.
Isunya
Seperti yang dicadangkan oleh mesej ralat, EntityFramework mengharapkan ungkapan lambdas, yang merupakan ungkapan ringkas tanpa sebarang pernyataan blok. Dalam contoh yang disediakan, ungkapan lambda:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; });
mengandungi pernyataan blok, menjadikannya lambda pernyataan. EntityFramework tidak boleh menukar ungkapan ini kepada bentuk yang sesuai untuk melaksanakan pertanyaan pangkalan data.
Penyelesaian
Untuk menyelesaikan ralat, faktorkan semula ungkapan lambda anda untuk menggunakan ungkapan lambda. Lambdas ungkapan ialah ungkapan satu baris yang secara langsung mengembalikan nilai tanpa menggunakan sebarang pernyataan tambahan. Dalam kes ini, anda boleh menulis semula lambda seperti berikut:
Obj[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 });
Ungkapan lambda ini menghapuskan pernyataan blok dan terus mengembalikan objek Obj baharu. Borang ini serasi dengan jangkaan pokok ekspresi EntityFramework dan akan menyelesaikan ralat kompilasi.
Atas ialah kandungan terperinci Mengapa Rangka Kerja Entiti Melemparkan 'Ungkapan Lambda dengan Badan Penyata Tidak Boleh Ditukar kepada Pokok Ungkapan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!