1

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

//代码

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表达式。但这不起作用。

我怎样才能做到这一点?

4

1 回答 1

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);
于 2013-07-11T10:30:39.167 回答