gpt4 book ai didi

c# - 在 linq 中动态设置 order by 子句中的键

转载 作者:行者123 更新时间:2023-12-02 05:29:45 24 4
gpt4 key购买 nike

我需要使用 linq 在 OrderBy 子句中设置键,其中键是对象的属性。我只有属性(property)名称。如何动态设置属性。

class Obj 
{
string Level
{
get;
set;
}
}

List<Obj> objList;

objList.OrderByDescending(x => x.Level); => "here i only have property name."

希望大家能帮忙

谢谢苏尼尔

最佳答案

您可以通过 Extension Methods 来做到这一点 Creating Expression Trees 动态点赞

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);;
}

和 OrderBy

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);;
}

你可以把这两个合二为一

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("Level","asc")//升序objList.OrderBy("Level","desc")//降序

希望对你有帮助

关于c# - 在 linq 中动态设置 order by 子句中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12564545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com