Rumah >pembangunan bahagian belakang >C++ >Mengapa Ungkapan Lambda Saya dengan Badan Penyata Menyebabkan Ralat dalam Rangka Kerja Entiti?
Ungkapan Lambda dengan Ralat Badan Penyata dalam EntityFramework
Dalam EntityFramework, ralat biasa yang dihadapi semasa bekerja dengan ungkapan lambda ialah:
"Ungkapan lambda dengan badan penyata tidak boleh ditukar kepada pokok ungkapan."
Ralat ini berlaku apabila ungkapan lambda mengandungi pernyataan dan bukannya ungkapan. Dalam EntityFramework, ungkapan lambda digunakan untuk menentukan keadaan atau transformasi dalam pertanyaan. Walau bagaimanapun, ungkapan tidak boleh mengandungi pernyataan yang mengubah suai pembolehubah atau melakukan tindakan.
Contoh:
Coretan kod berikut mencetuskan ralat:
Obj[] myArray = objects.Select(o => { var someLocalVar = o.someVar; return new Obj() { Var1 = someLocalVar, Var2 = o.var2 }; }).ToArray();
Penjelasan:
Dalam contoh ini, lambda ungkapan menggunakan badan pernyataan untuk memberikan nilai kepada pembolehubah setempat someLocalVar sebelum mengembalikan objek. Walau bagaimanapun, badan penyata ini tidak boleh ditukar kepada pepohon ungkapan untuk dilaksanakan oleh EntityFramework.
Penyelesaian:
Untuk menyelesaikan ralat ini, tulis semula ungkapan lambda supaya ia hanya mengandungi ungkapan. Dalam kes ini, ini bermakna mengalih keluar badan pernyataan dan membina objek Obj secara langsung:
Arr[] myArray = objects.Select(o => new Obj() { Var1 = o.someVar, Var2 = o.var2 }).ToArray();
Kini ungkapan lambda terdiri semata-mata daripada ungkapan dan boleh ditukar kepada pepohon ekspresi untuk diproses oleh EntityFramework.
Atas ialah kandungan terperinci Mengapa Ungkapan Lambda Saya dengan Badan Penyata Menyebabkan Ralat dalam Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!