OrderBy를 사용하여 LINQ 결과를 동적으로 정렬
질문:
매개변수를 기반으로 OrderBy 메소드에 전달된 매개변수를 동적으로 지정하는 방법은 무엇입니까?
세부정보:
학생 목록이 있고 특정 속성을 기준으로 정렬하려고 한다고 가정해 보겠습니다. 현재 구현에서는 하드코딩된 속성 이름을 사용하지만 속성 이름을 매개변수로 전달하려면 어떻게 해야 합니까?
예:
<code class="language-C#">string param = "City"; List<student> orderByAddress = existingStudents.OrderByDescending(c => param).ToList();</code>
해결책:
이 솔루션에는 리플렉션을 사용하여 표현식 트리를 동적으로 구축하는 것이 포함됩니다. 확장 메서드는 다음과 같이 생성할 수 있습니다.
<code class="language-C#">public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string orderByProperty, bool desc) { string command = desc ? "OrderByDescending" : "OrderBy"; var type = typeof(TEntity); var property = type.GetProperty(orderByProperty); var parameter = Expression.Parameter(type, "p"); var propertyAccess = Expression.MakeMemberAccess(parameter, property); var orderByExpression = Expression.Lambda(propertyAccess, parameter); var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExpression)); return source.Provider.CreateQuery<TEntity>(resultExpression); }</code>
orderByProperty
매개변수는 속성 이름을 나타내고 desc
는 정렬 순서를 결정합니다.
사용법:
이제 학생 목록을 동적으로 정렬할 수 있습니다.
<code class="language-C#">existingStudents.OrderBy("City", true); // 按城市降序排序 existingStudents.OrderBy("City", false); // 按城市升序排序</code>
위 내용은 OrderBy를 사용하여 LINQ 결과를 동적으로 주문하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!