動態LINQ:選擇特定列
假設以下場景:您有一個包含多個字段的Data類,並且想要根據用戶提供的輸入動態選擇特定列。這帶來了一個挑戰,因為選擇的字段在編譯時是未知的。
動態Lambda表達式創建
為了克服這個障礙,我們可以動態創建一個執行選擇的lambda表達式。方法如下:
<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>
使用方法
有了lambda創建函數,您現在可以執行動態選擇:
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
這將創建一個動態選擇“Field1”和“Field2”屬性的lambda表達式,有效地執行數據的自定義投影。
結論
使用此技術,您可以克服靜態定義的LINQ投影的限制,並根據運行時輸入啟用動態選擇。這允許在預先不知道所需列的數據處理場景中實現更大的靈活性和適應性。
以上是如何在LINQ中動態選擇特定的列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!