Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah LINQ dinamik boleh membolehkan pemilihan lajur dinamik di C#?

Bagaimanakah LINQ dinamik boleh membolehkan pemilihan lajur dinamik di C#?

DDD
Lepaskan: 2025-01-28 20:06:11
asal
831 orang telah melayarinya

How Can Dynamic LINQ Enable Dynamic Column Selection in C#?

C#Dynamic Linq: Menyedari pemilihan lajur dinamik

Memandangkan kelas data yang mengandungi pelbagai bidang di bawah:

<code class="language-csharp">public class Data
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field3 { get; set; }
    public string Field4 { get; set; }
    public string Field5 { get; set; }
}</code>
Salin selepas log masuk
Katakan anda ingin memilih lajur tertentu secara dinamik dari senarai objek data, contohnya, hanya Field1 dan Field2. Semasa tempat kejadian medan yang dipilih dan anda mesti menentukan bidang ini semasa runtime, menggunakan LINQ dinamik adalah kaedah yang berkesan.

Untuk melaksanakannya secara dinamik, kita boleh membuat ekspresi lambda secara dinamik:

<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
Kaedah ini menerima rentetan nama medan yang diperlukan sebagai input, dan mengembalikan ekspresi Lambda

. Ekspresi Lambda secara dinamik mencipta objek data baru dengan nilai medan yang ditentukan, untuk memilih medan ini. Func<Data, Data>

Menggunakan kaedah ini, kita boleh memilih senarai tertentu dari senarai data seperti ini:

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
Salin selepas log masuk
Walaupun anda tidak tahu medan yang dipilih semasa penyusunan, ini juga dapat memberikan penyelesaian yang dinamik dan fleksibel untuk memilih lajur dalam pertanyaan LINQ.

Atas ialah kandungan terperinci Bagaimanakah LINQ dinamik boleh membolehkan pemilihan lajur dinamik di C#?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan