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>
Func<Data, Data>
この改訂された応答は、より良い読み取りのためにコードのフォーマットを維持します
以上が動的ラムダ式は、実行時にC#LINQで選択的なデータ投影を可能にする方法をどのように可能にしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。