我没想到这么难找,但似乎是这样。以下是情况说明。
我有一个名为ApplySort的方法,它接收从mvc页面提交的3个参数。
private List<dynamic> ApplySort(List<dynamic> listToBeSorted, string sortBy, string sortOrder)
{
if (String.IsNullOrEmpty(sortBy))
sortBy = "createddate";
if (String.IsNullOrEmpty(sortOrder) || sortOrder.Trim() != "0")
sortOrder = "1"; // 1 = descending, 0 = ascending
if (sortOrder == "1")
{
switch (sortBy)
{
case "name":
listToBeSorted = listToBeSorted.OrderByDescending(a => a.name).ToList();
break;
case "assigned":
listToBeSorted = listToBeSorted.OrderByDescending(a => a.title).ToList();
break;
case "duedate":
listToBeSorted = listToBeSorted.OrderByDescending(a => a.end).ToList();
break;
case "status":
listToBeSorted = listToBeSorted.OrderByDescending(a => a.title).ToList();
break;
default:
listToBeSorted = listToBeSorted.OrderByDescending(a => a.title).ToList();
break;
}
}
else
{
// same code as in if-block, with just OrderBy calls instead of OrderByDescending
}
return listToBeSorted;
}
两个问题:
1)方法似乎过于冗长(if和else中几乎相同的代码)。
2)我希望能够使用多个列排序。sortBy 参数可以有像“name,title,createddate,status”这样的值。因此应该首先按名称排序,然后按标题排序,然后按创建日期排序......以此类推。我可以通过顺序检查参数来使用ThenBy。 但是如何根据参数值动态应用一系列ThenBy (s),其中ThenBy的数量可能会变化。
string[] sortParams = sortBy.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
listToBeSorted.OrderBy(i=>i.sortParams[0]).ThenBy(j=>j.sortParams[1]).ThenBy(k=>k.sortParams[2])...(so on till sortParams.length)
我该如何做这个?另外,我如何在同一行中使用sortOrder参数按升序或降序排序,而不是使用if-else语句。
.ThenBy(new string[])
。 - Erti-Chris Eelmaa