dotnet .net core 2 OrderBy/OrderByDescending 带泛型参数

kuz*_*zdu 2 .net c# sorting

我想创建一种动态方式来返回按参数 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 核心的新手。所以我希望我没有制定一个乌托邦式的要求。

Que*_*ger 5

这样的事情应该可以解决问题(使用反射):

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)