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>
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!