>백엔드 개발 >C++ >IQueryable의 OrderBy를 사용하여 일반 문자열 열 정렬을 구현하는 방법은 무엇입니까?

IQueryable의 OrderBy를 사용하여 일반 문자열 열 정렬을 구현하는 방법은 무엇입니까?

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

How to Implement Generic String Column Sorting with IQueryable's OrderBy?

문자열 열 정렬에 일반 매개변수를 사용하도록 OrderBy 확장

일반 확장 방법에서 문자열 열 이름을 사용하여 IQueryable을 정렬하는 방법은 무엇입니까? 기존 방법 ApplySortFilter<T, TResult>에는 런타임에 OrderBy 유형을 지정해야 한다는 단점이 있는데 이는 불가능합니다.

질문:

<code class="language-c#">public static IQueryable<TResult> ApplySortFilter<T, TResult>(this IQueryable<T> query, string columnName)
where T : EntityObject
{
    var param = Expression.Parameter(typeof(T), "o");
    var body = Expression.PropertyOrField(param, columnName);

    var sortExpression = Expression.Lambda(body, param);
    return query.OrderBy(sortExpression);
}</code>

해결책:

이러한 한계를 극복하려면 sortExpression에서 OrderBy 유형을 추론해야 합니다. 수정된 구현은 다음과 같습니다.

<code class="language-c#">public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string ordering, params object[] values)
{
    var type = typeof(T);
    var property = type.GetProperty(ordering);
    var parameter = Expression.Parameter(type, "p");
    var propertyAccess = Expression.MakeMemberAccess(parameter, property);
    var orderByExp = Expression.Lambda(propertyAccess, parameter);
    MethodCallExpression resultExp = Expression.Call(typeof(Queryable), "OrderBy", new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExp));
    return source.Provider.CreateQuery<T>(resultExp);
}</code>

이 수정된 메서드는 주문되는 속성의 유형을 동적으로 추론하고 OrderBy 작업을 올바르게 적용합니다.

내림차순 정렬 지침:

내림차순 정렬의 경우 MethodCallExpression에서 "OrderBy"를 "OrderByDescending"으로 바꾸면 됩니다.

위 내용은 IQueryable의 OrderBy를 사용하여 일반 문자열 열 정렬을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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