중첩된 객체 액세스를 위해
obj.Prop"를 "parent => parent.obj.Prop"로 바꾸시겠습니까? " />
LINQ 식 "obj => obj.Prop"를 "parent => parent.obj.Prop"으로 변환: 단계별 가이드
LINQ 식은 개체의 속성에 액세스하는 강력한 방법을 제공합니다. 그러나 중첩된 개체의 속성에 액세스하는 등 계층 구조의 여러 수준을 탐색해야 하는 경우도 있습니다.
다음 LINQ 표현식을 고려하세요.
<code class="language-c#">cust => cust.Name</code>
이 표현식은 고객 개체의 Name 속성을 검색합니다. 그러나 CustomerModel에 있는 Customer 개체의 Name 속성에 액세스해야 한다면 어떻게 될까요? 원래의 표현이 부족한 것 같습니다.
이 문제를 해결하려면 원래 표현식을 받아들이고 상위 클래스를 입력 매개변수로 사용하여 새 표현식을 생성하는 메서드가 필요합니다. 이 새로운 표현식은 MVC 메서드의 매개 변수가 되어 중첩된 속성에 효율적으로 액세스할 수 있습니다.
최초 릴리스 및 버그
한 가지 가능한 접근 방식은 다음과 같습니다.
<code class="language-c#">public Expression<Func<object>> ExpressionFromField<T, TModel>(FieldDefinition<T> field) where TModel : BaseModel<T> { var param = Expression.Parameter(typeof(TModel), "t"); var body = Expression.PropertyOrField(param, nameof(SelectedItem)); var member = Expression.MakeMemberAccess(body, field.Member); return Expression.Lambda<Func<object>>(member, param); }</code>
그러나 이 버전은 중첩된 속성(예: cust.Address.State)에 액세스할 때 실패합니다. 발생한 오류는 지정된 멤버가 본문에 존재하지 않으며 본문이 주소 개체가 아닌 고객 개체를 참조함을 나타냅니다.
해결책: 표현 조합
필요한 해결책은 표현 구성에 있습니다. 함수를 구성할 수 있는 것처럼 표현식도 구성할 수 있습니다.
<code class="language-c#">public static Expression<Func<T, TResult>> Compose<T, TIntermediate, TResult>( this Expression<Func<T, TIntermediate>> first, Expression<Func<TIntermediate, TResult>> second) { return Expression.Lambda<Func<T, TResult>>( second.Body.Replace(second.Parameters[0], first.Body), first.Parameters[0]); }</code>
Replace 메소드를 사용하여 한 표현식의 모든 인스턴스를 다른 표현식으로 바꿉니다. 이러한 방법을 사용하면 다음과 같은 표현식을 구성할 수 있습니다.
<code class="language-c#">Expression<Func<object>> propertySelector = cust => cust.Name; Expression<Func<CustomerModel, Customer>> modelSelector = model => model.Customer; Expression<Func<CustomerModel, object>> magic = modelSelector.Compose(propertySelector);</code>
이제 마법 표현식을 통해 CustomerModel에 있는 Customer 개체의 Name 속성에 효과적으로 액세스할 수 있습니다. MVC 메소드의 표현식 매개변수로 사용되어 중첩된 속성에 대한 원활한 액세스를 제공할 수 있습니다.
위 내용은 중첩된 개체 액세스를 위해 'obj => obj.Prop'와 같은 LINQ 식을 'parent => parent.obj.Prop'로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!