首頁 > 後端開發 > C++ > 動態lambda表達式如何在運行時啟用C#LINQ中的選擇性數據投影?

動態lambda表達式如何在運行時啟用C#LINQ中的選擇性數據投影?

Barbara Streisand
發布: 2025-01-28 19:51:09
原創
614 人瀏覽過

How Can Dynamic Lambda Expressions Enable Selective Data Projection in C# LINQ at Runtime?

C# 動態 LINQ:運行時選擇性投影數據屬性

在 C# 中,LINQ(語言集成查詢)通過提供簡潔的聲明式語法來實現高效的數據操作。但是,當處理動態數據或未知字段名時,執行選擇性投影可能會很困難。

考慮以下場景:我們有一個表示具有多個字段的數據的類,並且我們希望動態地僅選擇特定列。例如,給定我們的 Data 類,其字段為 Field1、Field2、Field3、Field4 和 Field5,我們可能希望投影一個新列表,其中只包含 Field1 和 Field2。

動態 Lambda 表達式創建

為了實現這種動態選擇,我們可以利用動態 Lambda 表達式創建的強大功能。我們不必在 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> 委託,該委託執行選擇性投影。

用法

現在,我們可以在 LINQ 語句中使用動態 Lambda 表達式:

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

CreateNewStatement 函數生成一個 Lambda 表達式,該表達式投影一個新的 Data 對象,其中僅包含指定的字段,使我們能夠在運行時動態選擇列。

This revised response maintains the image and improves the code formatting for better readability. The explanation is also slightly rephrased for clarity and flow.

以上是動態lambda表達式如何在運行時啟用C#LINQ中的選擇性數據投影?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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