일반 열 이름으로 IQueryable의 OrderBy 메서드 확장
이 기사에서는 주어진 문자열 열 이름을 기준으로 정렬할 수 있도록 일반 확장 메서드로 IQueryable을 향상시키는 방법을 살펴봅니다.
다음 확장 방법을 고려하세요.
<code class="language-csharp">public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName) where T : EntityObject</code>
정렬 기능을 구현하려면 주어진 컬럼 이름을 사용하여 표현식을 작성해야 합니다. 그러나 문제가 발생했습니다. 표현식에서 유추된 순서 유형이 OrderBy 메서드에 필요한 유형과 일치하지 않았습니다.
정렬 유형 TSortColumn
은 런타임에만 결정될 수 있으므로 이는 문제가 됩니다. 그러나 해결책이 있습니다.
제공된 코드 예제는 유사한 접근 방식을 보여줍니다.
<code class="language-csharp">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)</code>
이 메소드는 열 이름을 나타내는 문자열 매개변수 ordering
를 허용합니다. 지정된 열 이름과 람다 표현식을 기반으로 표현식을 동적으로 생성합니다. 그런 다음 결과 표현식을 사용하여 OrderBy 메서드를 호출하는 MethodCallExpression
을 만듭니다.
마지막으로 source.Provider.CreateQuery<T>
이 호출되어 정렬된 IQueryable을 반환합니다.
수정: 내림차순 정렬:
<code class="language-csharp">MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderByDescending", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));</code>
위 내용은 일반 열 이름으로 IQueryable의 OrderBy를 어떻게 확장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!