obj.Prop""을 ""parent => parent.obj.Prop""으로 변환하는 중 특정 시나리오에서는 다음과 같이 됩니다."/> obj.Prop""을 ""parent => parent.obj.Prop""으로 변환하는 중 특정 시나리오에서는 다음과 같이 됩니다.">

>백엔드 개발 >C++ >LINQ 식을 'obj => obj.Prop'에서 'parent => parent.obj.Prop'로 변환하는 방법은 무엇입니까?

LINQ 식을 'obj => obj.Prop'에서 'parent => parent.obj.Prop'로 변환하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-18 07:17:09498검색

LINQ 식 "obj => obj.Prop"를 "parent => parent.obj.Prop"으로 변환

객체에서 직접 속성을 선택하는 LINQ 표현식을 상위 객체를 통해 속성을 선택하는 표현식으로 변환해야 하는 경우도 있습니다. 예를 들어 "cust => cust.Name"과 같은 표현식은 "parent => parent.Customer.Name"으로 변환되어야 합니다.

이를 위해 표현 구성의 개념을 사용할 수 있습니다. 여기에는 두 개의 표현식, 즉 속성을 선택하는 표현식과 해당 속성이 포함된 개체를 선택하는 표현식을 허용하는 함수를 만드는 작업이 포함됩니다. 다음 코드 예제에서는 이 방법을 사용하는 솔루션을 제공합니다.

<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 메서드 매개 변수를 비롯한 다양한 시나리오에 적합합니다.

How to Convert a LINQ Expression from obj.Prop"를 "parent => parent.obj.Prop"로 바꾸시겠습니까? " />

위 내용은 LINQ 식을 'obj => obj.Prop'에서 'parent => parent.obj.Prop'로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.