Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah LINQ dinamik boleh membolehkan pemilihan lajur dinamik di C#?
<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>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>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>
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>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!