我想创建一种动态方式来返回按参数 xy 排序的列表。该列表可以按降序、升序、ID、用户名、邮件等排序。
我以字符串形式接收此参数。所以例如sort=-username
减号表示列表降序。排序参数是用户名。
所以我回来了 user.OrderByDescending(o => o.Username).ToList();
目前,在长 if-else 构造的帮助下,我检测到需要哪种排序。
我希望我可以在对象参数的函数的帮助下替换排序字符串参数。
伪代码
//input for example: sort=-username
Boolean isAscending = isAscending(sort) //return true or false
var parameter = isSortStringInsideObject(sort) //
if (isAscending) {
user.OrderBy(o => o.parameter).ToList();
} else {
user.OrderByDescending(o => o.parameter).ToList();
}
Run Code Online (Sandbox Code Playgroud)
所以参数可以是对象中的每个参数。
我是 .net 核心的新手。所以我希望我没有制定一个乌托邦式的要求。
这样的事情应该可以解决问题(使用反射):
var isAscending = GetIsAscending(sort);
var pi = typeof(User).GetProperty(parameter);
if (pi != null)
user = isAscending
? user.OrderBy(a => pi.GetValue(a, null))
: user.OrderByDescending(a => pi.GetValue(a, null));
Run Code Online (Sandbox Code Playgroud)