Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah ekspresi lambda dinamik membolehkan unjuran data terpilih di C# linq pada masa runtime?

Bagaimanakah ekspresi lambda dinamik membolehkan unjuran data terpilih di C# linq pada masa runtime?

Barbara Streisand
Lepaskan: 2025-01-28 19:51:09
asal
614 orang telah melayarinya

How Can Dynamic Lambda Expressions Enable Selective Data Projection in C# LINQ at Runtime?

c# dinamik linq: atribut data unjuran terpilih

Dalam C#, LINQ (Integrasi Bahasa) boleh mencapai operasi data yang cekap dengan menyediakan tatabahasa pernyataan mudah. Walau bagaimanapun, apabila memproses data dinamik atau nama medan yang tidak diketahui, unjuran selektif mungkin sukar.

Memandangkan senario berikut: Kami mempunyai kelas yang menunjukkan pelbagai bidang, dan kami mahu memilih lajur tertentu secara dinamik. Sebagai contoh, kelas data yang memberi kita, bidangnya adalah Field1, Field2, Field3, Field4, dan Field5.

penciptaan ekspresi lambda dinamik

Untuk mencapai pilihan dinamik ini, kita boleh menggunakan ciri -ciri berkuasa yang dicipta oleh ekspresi Lambda Dinamik. Kami tidak perlu memilih ungkapan Lambda baru secara dinamik dalam pernyataan Linq.

Berikut adalah kaedah yang dapat kita lakukan operasi ini:

Fungsi ini menggunakan nama medan yang diperlukan sebagai rentetan dan mengembalikan komisen

untuk melaksanakan unjuran selektif.
<code class="language-csharp">Func<Data, Data> CreateNewStatement(string fields)
{
    // 输入参数 "o"
    var xParameter = Expression.Parameter(typeof(Data), "o");

    // 新语句 "new Data()"
    var xNew = Expression.New(typeof(Data));

    // 创建初始化器
    var bindings = fields.Split(',').Select(o => o.Trim())
        .Select(o =>
        {
            // 属性 "Field1"
            var mi = typeof(Data).GetProperty(o);

            // 原始值 "o.Field1"
            var xOriginal = Expression.Property(xParameter, mi);

            // 设置值 "Field1 = o.Field1"
            return Expression.Bind(mi, xOriginal);
        });

    // 初始化 "new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var xInit = Expression.MemberInit(xNew, bindings);

    // 表达式 "o => new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter);

    // 编译为 Func<Data, Data>
    return lambda.Compile();
}</code>
Salin selepas log masuk

Penggunaan Func<Data, Data>

Sekarang, kita boleh menggunakan ekspresi lambda dinamik dalam pernyataan LINQ: Fungsi

menghasilkan ungkapan lambda, yang memproyeksikan objek data baru, yang hanya mengandungi medan yang ditentukan, membolehkan kami memilih lajur secara dinamik semasa runtime.

Sambutan yang disemak ini mengekalkan pemformatan kod untuk pembacaan yang lebih baik

Atas ialah kandungan terperinci Bagaimanakah ekspresi lambda dinamik membolehkan unjuran data terpilih di C# linq pada masa runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan