首頁 > 後端開發 > C++ > 動態LINQ如何在C#中啟用動態列選擇?

動態LINQ如何在C#中啟用動態列選擇?

DDD
發布: 2025-01-28 20:06:11
原創
830 人瀏覽過

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

C#動態LINQ:實現動態列選擇

考慮以下包含多個字段的Data類:

<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>
登入後複製

假設您想從Data對象的列表中動態選擇特定的列,例如,只檢索Field1和Field2。在編譯時不知道所選字段並且必須在運行時指定這些字段的場景中,使用動態LINQ是一種有效的方法。

為了動態實現這一點,我們可以動態創建一個lambda表達式:

<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>
登入後複製

此方法接受所需字段名稱的字符串作為輸入,並返回一個Func<Data, Data> lambda表達式。該lambda表達式動態創建一個具有指定字段值的新Data對象,從而選擇這些字段。

使用此方法,我們可以像這樣從Data列表中選擇特定列:

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
登入後複製

即使在編譯時不知道所選字段,這也能為在LINQ查詢中選擇列提供動態且靈活的解決方案。

以上是動態LINQ如何在C#中啟用動態列選擇?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板