ホームページ > バックエンド開発 > C++ > 動的ラムダ式は、実行時にC#LINQで選択的なデータ投影を可能にする方法をどのように可能にしますか?

動的ラムダ式は、実行時に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#dynamic linq:選択的投影データ属性

C#では、LINQ(言語統合)は、簡単なステートメント文法を提供することにより、効率的なデータ操作を実現できます。ただし、動的データまたは不明なフィールド名を処理する場合、選択的投影が難しい場合があります。

次のシナリオを考慮してください。複数のフィールドを示すクラスがあり、特定の列のみを動的に選択する必要があります。たとえば、そのフィールドは、Field1、Field3、Field4、およびField5のみを投影することをお勧めします。

ダイナミックラムダの表現作成

以下は、この操作を実行できる方法です。 この関数は、必要なフィールド名を文字列として使用し、

委員会を返して選択的投影を実行します。

使用法

<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>
ログイン後にコピー
さあ、LINQステートメントで動的なラムダ式を使用できます:

Func<Data, Data>

関数は、指定されたフィールドのみを含む新しいデータオブジェクトを投影したラムダ式を生成し、実行時に列を動的に動的に選択できるようにします。

この改訂された応答は、より良い読み取りのためにコードのフォーマットを維持します

以上が動的ラムダ式は、実行時にC#LINQで選択的なデータ投影を可能にする方法をどのように可能にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート