Rumah >pembangunan bahagian belakang >C++ >Mengapa Ungkapan Lambda Saya dengan Badan Penyata Menyebabkan Ralat dalam Rangka Kerja Entiti?

Mengapa Ungkapan Lambda Saya dengan Badan Penyata Menyebabkan Ralat dalam Rangka Kerja Entiti?

DDD
DDDasal
2024-12-31 19:42:09926semak imbas

Why Does My Lambda Expression with a Statement Body Cause an Error in Entity Framework?

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!

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