> 백엔드 개발 > C++ > LINQ에서 OrderBy 속성을 동적으로 지정하려면 어떻게 해야 합니까?

LINQ에서 OrderBy 속성을 동적으로 지정하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-10 12:35:42
원래의
309명이 탐색했습니다.

How Can I Dynamically Specify the OrderBy Property in LINQ?

LINQ OrderBy 매개변수를 동적으로 지정

C#에서 LINQ의 OrderBy 메서드를 사용하면 지정된 속성이나 표현식을 기반으로 데이터를 정렬할 수 있습니다. 하지만 정렬할 속성이나 표현식을 동적으로 지정하려면 어떻게 해야 할까요?

질문:

매개변수가 주어지면 지정된 속성을 기준으로 학생 목록을 정렬하려고 하지만 현재 OrderBy 호출의 속성 이름이 하드코딩되어 있습니다.

예:

<code class="language-csharp">List<Student> existingStudents = new List<Student> { new Student { ... }, new Student { ... } };
List<Student> orderByAddress = existingStudents.OrderBy(c => c.Address).ToList();</code>
로그인 후 복사

타겟:

OrderBy에서 정적 속성 이름을 사용하는 대신 속성 이름을 매개변수로 사용하고 싶습니다.

예:

<code class="language-csharp">string param = "City";
List<Student> orderByCity = existingStudents.OrderBy(c => c.City).ToList(); //仍然需要明确指定属性</code>
로그인 후 복사

해결책:

리플렉션을 사용하여 OrderBy 표현식을 동적으로 구성할 수 있습니다.

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string orderByProperty, bool desc)
{
    // ...  (反射代码构建表达式树) ...
    return source.Provider.CreateQuery<T>(resultExpression);
}</code>
로그인 후 복사

그런 다음 지정된 속성을 기준으로 동적으로 정렬할 수 있습니다.

<code class="language-csharp">existingStudents.OrderBy("City", true); // 降序
existingStudents.OrderBy("City", false); // 升序</code>
로그인 후 복사

(참고: 전체 리플렉션 코드 구현은 더 복잡하므로 여기서는 생략합니다. 표현식 트리를 구축하고 존재하지 않는 속성과 같은 가능한 예외를 처리하려면 System.Linq.Expressions 네임스페이스를 사용해야 합니다.) 이 솔루션은 동적 정렬 아이디어를 제공합니다. 완전한 구현을 위해서는 실제 상황에 따라 더욱 강력한 코드를 작성해야 합니다. c => param을 직접 사용하는 것은 실수입니다. 이렇게 하면 학생 개체의 속성이 아닌 매개변수 문자열 자체만 정렬되기 때문입니다. 동적으로 속성을 얻고 올바른 식 트리를 작성하려면 리플렉션을 사용해야 합니다.

위 내용은 LINQ에서 OrderBy 속성을 동적으로 지정하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿