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 중국어 웹사이트의 기타 관련 기사를 참조하세요!