使用LINQ在c#中升序和降序列表对象

时间:2013-07-11 10:26:40

标签: c# linq sorting telerik-grid

我有一个telerikgrid,其中所有列都可以按ascdesc进行排序。现在我有一个list对象绑定到网格的datasource,我必须sort列。在这里,我传递列名和表达式进行排序。

//代码

public List<TelerikBookingRequestingColumns> Select(int startRowIndex, int maximumRows, string sortExpressions, List<GridFilterExpression> filterExpressions)
        {
            int numberOfObjectsPerPage = maximumRows;

            List<TelerikBookingRequestingColumns> objList = new List<TelerikBookingRequestingColumns>();
            objList.AddRange(list);

            if (!String.IsNullOrEmpty(sortExpressions))
            {
                string firstExpression = sortExpressions.Split(',')[0];

                var queryResultorderby = (from listObject in objList
                                          orderby firstExpression 
                                          select listObject);   

               objList= queryResultorderby.ToList<TelerikBookingRequestingColumns>();
            }

            var queryResultPage = (from listObject in objList
               .Skip(startRowIndex)
               .Take(numberOfObjectsPerPage)
                                   select listObject);

            return queryResultPage.ToList<TelerikBookingRequestingColumns>();



        }

在上面的代码中,firstExpression将类似于(empid asc)或(empid desc),这意味着列名称和sort表达式。但这不起作用。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

orderby需要lambda作为键选择器:

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
    this IEnumerable<TSource> source,
    Func<TSource, TKey> keySelector
)

但是你试图传递简单的字符串。这不行。如果要根据某些字符串对结果进行排序,请尝试使用Dynamic Linq


从NuGet获取System.Linq.Dynamic并以这种方式应用排序(假设firstExpression看起来像 propertyname + asc / desc ):

var firstExpression =  "empid asc";
var queryResultorderby = objList.AsQueryable()
                                .OrderBy(firstExpression);