Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh memilih lajur tertentu secara dinamik di Linq?

Bagaimanakah saya boleh memilih lajur tertentu secara dinamik di Linq?

Patricia Arquette
Patricia Arquetteasal
2025-01-28 20:08:12335semak imbas

How Can I Dynamically Select Specific Columns in LINQ?

LINQ Dinamik: Pilih lajur tertentu

Dengan mengandaikan adegan berikut: Anda mempunyai kelas data yang mengandungi pelbagai bidang, dan anda ingin memilih lajur tertentu berdasarkan dinamik input yang disediakan oleh pengguna. Ini membawa cabaran kerana medan yang dipilih tidak diketahui ketika menyusun.

penciptaan ekspresi lambda dinamik

Untuk mengatasi halangan ini, kita boleh membuat ekspresi lambda secara dinamik yang melaksanakan yang dipilih. Kaedahnya adalah seperti berikut:

cara menggunakan

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

    // 新实例
    var xNew = Expression.New(typeof(Data));

    // 初始化器
    var bindings = fields.Split(',')
        .Select(o => o.Trim())
        .Select(o => 
        {
            var mi = typeof(Data).GetProperty(o);
            var xOriginal = Expression.Property(xParameter, mi);
            return Expression.Bind(mi, xOriginal);
        });

    // 初始化
    var xInit = Expression.MemberInit(xNew, bindings);

    // Lambda表达式
    var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter);

    // 编译
    return lambda.Compile();
}</code>
dengan fungsi penciptaan lambda, kini anda boleh melaksanakan pilihan dinamik:

Ini akan mewujudkan ekspresi lambda yang secara dinamik memilih sifat "Field1" dan "Field2" untuk melaksanakan unjuran data tersuai secara berkesan.

Kesimpulan

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>

Menggunakan teknologi ini, anda dapat mengatasi sekatan definisi statik unjuran LINQ, dan membolehkan pemilihan dinamik mengikut input. Ini membolehkan fleksibiliti dan kesesuaian yang lebih besar untuk mencapai fleksibiliti dan kebolehsuaian yang lebih besar dalam senario pemprosesan data yang tidak diketahui terlebih dahulu.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memilih lajur tertentu secara dinamik di Linq?. 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