我有一个telerikgrid
,其中所有列都可以按asc
和desc
进行排序。现在我有一个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
表达式。但这不起作用。
我怎样才能做到这一点?
答案 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);