ホームページ > バックエンド開発 > C++ > LINQ 式を「obj => obj.Prop」から「parent =>parent.obj.Prop」に変換するにはどうすればよいですか?

LINQ 式を「obj => obj.Prop」から「parent =>parent.obj.Prop」に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-18 07:17:09
オリジナル
492 人が閲覧しました

LINQ 式「obj => obj.Prop」を「parent =>parent.obj.Prop」に変換します

場合によっては、オブジェクトからプロパティを直接選択する LINQ 式を、親オブジェクトを通じてプロパティを選択する式に変換する必要があります。たとえば、「cust => cust.Name」のような式は、「parent =>parent.Customer.Name」に変換する必要があります。

これには、式合成の概念を使用できます。これには、2 つの式を引数として受け入れる関数の作成が含まれます。1 つはプロパティを選択する式、もう 1 つはそのプロパティを含むオブジェクトを選択する式です。次のコード例は、このメソッドを使用した解決策を示しています。

<code class="language-csharp">public static Expression<Func<TFirst, TResult>> Compose<TFirst, TIntermediate, TResult>(
    this Expression<Func<TFirst, TIntermediate>> first,
    Expression<Func<TIntermediate, TResult>> second)
{
    return Expression.Lambda<Func<TFirst, TResult>>(
        second.Body.Replace(second.Parameters[0], first.Body),
        first.Parameters[0]);
}</code>
ログイン後にコピー
さらに、式のすべての出現を置換するには、「Replace」と呼ばれるヘルパー メソッドが必要です。

<code class="language-csharp">public class ReplaceVisitor : ExpressionVisitor
{
    private readonly Expression from, to;

    public ReplaceVisitor(Expression from, Expression to)
    {
        this.from = from;
        this.to = to;
    }

    public override Expression Visit(Expression ex)
    {
        if (ex == from) return to;
        else return base.Visit(ex);
    }
}

public static Expression Replace(this Expression ex,
    Expression from,
    Expression to)
{
    return new ReplaceVisitor(from, to).Visit(ex);
}</code>
ログイン後にコピー
これらのヘルパー メソッドを使用すると、次のように式を組み合わせることができるようになりました。

<code class="language-csharp">// 从对象中选择一个属性
Expression<Func<Customer, string>> propertySelector = cust => cust.Name;

// 从模型中选择对象
Expression<Func<Model, Customer>> modelSelector = model => model.Customer;

// 组合两个表达式
Expression<Func<Model, string>> magic = modelSelector.Compose(propertySelector);</code>
ログイン後にコピー
このアプローチは、式を組み合わせてネストされたプロパティにアクセスするための柔軟なソリューションを提供し、MVC メソッド パラメーターを含むさまざまなシナリオに適したものになります。

obj.Prop" を "parent =>parent.obj.Prop" にしますか? " />How to Convert a LINQ Expression from

以上がLINQ 式を「obj => obj.Prop」から「parent =>parent.obj.Prop」に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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