csharp C#使用Lambda表达式为动态类型和动态属性排序通用列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp C#使用Lambda表达式为动态类型和动态属性排序通用列表相关的知识,希望对你有一定的参考价值。

/// Lifted from http://microsoftprogrammers.jebarson.com/sort-generic-list-using-lambda-expression-for-dynamic-type-and-dynamic-property/
/// Usage :
/// List<Employee> sortedEmployees = new Utility<Employee>().GetSortedList(employeeList, "City", SortDirection.Ascending);
public class Utility<T>
{
        /// <Summary>
        /// Gets the sorted list.
        /// </Summary>
        /// <param name="source" />The source.
        /// <param name="sortColumn" />The sort column.
        /// <param name="sortDirection" />The sort direction.
        /// <The sorted list. />
        private List<T> GetSortedList(List<T> source, string sortColumn, SortDirection sortDirection)
        {
            // Prepare the dynamic sort expression
            var paramExp = Expression.Parameter(typeof(T), typeof(T).ToString());
            Expression propConvExp = 
                             Expression.Convert(Expression.Property(paramExp, sortColumn), typeof(object));
            var sortExp = Expression.Lambda>(propConvExp, paramExp);

            if (sortDirection == SortDirection.Ascending)
            {
                return source.AsQueryable().OrderBy(sortExp).ToList();
            }
            else
            {
                return source.AsQueryable().OrderByDescending(sortExp).ToList();
            }
        }
}

以上是关于csharp C#使用Lambda表达式为动态类型和动态属性排序通用列表的主要内容,如果未能解决你的问题,请参考以下文章

c# 动态创建带字符串拼接的lambda表达式?

C++Lambda表达式作为参数

C++Lambda表达式作为参数

C++Lambda表达式作为参数

lambda表达式

根据表达式树动态生成Lambda表达式