Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh memilih lajur tertentu secara dinamik di 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!