在LINQ的秩序将重点by子句动态 [英] Set key inside order by clause in linq dynamically
本文介绍了在LINQ的秩序将重点by子句动态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要设置使用LINQ的排序依据条款,其中关键是一个对象的属性的关键。我只有用我的属性名称。我怎么能动态设置属性。
I need to set the key in the OrderBy clause using linq , where the key is a property of an object. I only have the property name with me. How can i set the property dynamically.
class Obj
{
string Level
{
get;
set;
}
}
List<Obj> objList;
objList.OrderByDescending(x => x.Level); => "here i only have property name."
希望任何一个可以帮助
Hope any one can help
谢谢
苏尼尔
推荐答案
You can do this by Extension Methods and Creating Expression Trees dynamically like
public static IOrderedQueryable<T> OrderByDescending<T>(this IQueryable<T> enumerable, string sortColumn)
{
var param = Expression.Parameter(typeof(T), "x");
var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
return enumerable.OrderByDescending(mySortExpression);;
}
和为排序依据
public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> enumerable, string sortColumn)
{
var param = Expression.Parameter(typeof(T), "x");
var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
return enumerable.OrderBy(mySortExpression);;
}
和您可以在一个结合这两种像
and you can combine these two in one like
public static IOrderedQueryable<T> OrderBy<T>(this IQueryable<T> enumerable, string sortColumn, string direction)
{
var param = Expression.Parameter(typeof(T), "x");
var mySortExpression = Expression.Lambda<Func<T, object>>(Expression.Property(param, sortColumn), param);
IOrderedQueryable<T> iQuery;
switch(direction)
{
case "desc":
iQuery = enumerable.OrderByDescending(mySortExpression);
break;
case "asc":
default :
iQuery = enumerable.OrderBy(mySortExpression);
break;
}
return iQuery;
}
然后就可以调用它像 objList.OrderBy( 级别,ASC)
//对于升序
objList.OrderBy(级别,降序)
//对于降序
Then you can call it like objList.OrderBy("Level","asc")
//For Ascending
objList.OrderBy("Level","desc")
//For Descending
希望这将有助于
这篇关于在LINQ的秩序将重点by子句动态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文