>백엔드 개발 >C++ >문자열 열 이름을 사용하여 IQueryable을 동적으로 주문하는 방법은 무엇입니까?

문자열 열 이름을 사용하여 IQueryable을 동적으로 주문하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-14 10:56:41937검색

How to Dynamically Order IQueryable Using a String Column Name?

일반 확장 메서드의 IQueryable에서 문자열 열 이름을 사용하여 OrderBy

OrderBy를 사용하여 쿼리를 정렬하는 경우 정렬 표현식의 유형을 지정해야 합니다. 그러나 어떤 경우에는 컴파일 타임에 유형을 알 수 없으므로 문자열 열 이름을 사용하여 정렬을 적용하기 어려울 수 있습니다.

이 문제를 극복하기 위해 열 이름을 문자열로 받고 리플렉션을 기반으로 정렬 식을 동적으로 생성하는 일반 확장 메서드를 만들 수 있습니다. 수정된 코드 버전은 다음과 같습니다.

<code class="language-csharp">public static IQueryable<T> ApplySortFilter<T>(this IQueryable<T> query, string columnName)
{
    var type = typeof(T);
    var property = type.GetProperty(columnName);
    var parameter = Expression.Parameter(type, "o");
    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
    var sortExpression = Expression.Lambda(propertyAccess, parameter);
    return query.OrderBy(sortExpression);
}</code>

이 업데이트된 코드는 리플렉션을 사용하여 제공된 열 이름을 기반으로 속성을 검색하고 동적 정렬 표현식을 생성합니다. 이제 다음과 같이 사용할 수 있습니다:

<code class="language-csharp">var sortedQuery = query.ApplySortFilter("ColumnName");</code>

여기서 "ColumnName"은 정렬할 열의 이름입니다.

제공된 답변에서 제안된 것처럼 또 다른 접근 방식은 유형 및 정렬 표현식을 매개변수로 허용하는 사용자 정의 확장 방법을 사용하는 것입니다.

<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)
{
    var type = typeof(T);
    // ... (其余代码与之前相同)
}</code>

이 방법은 다음과 같이 사용할 수 있습니다.

<code class="language-csharp">var sortedQuery = query.OrderBy<T>("ColumnName");</code>

이 두 가지 방법 중 하나를 사용하면 기본 유형에 관계없이 문자열 열 이름을 사용하여 IQueryable에 동적으로 정렬을 적용할 수 있습니다.

위 내용은 문자열 열 이름을 사용하여 IQueryable을 동적으로 주문하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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