我有一个List<T>
,现在我必须向用户显示一个页面,其中对象内的每个字段都显示一个复选框。
现在,如果用户检查其中任何一个,或检查所有这些,或者让我们选择其中没有一个,我该如何相应地订购我的列表?
有8个字段,用户可以选择任意组合,因此列表中的数据应相应地进行排序。
我目前正在使用List<>
方法OrderBy()
。
任何帮助都将不胜感激。
这里是我如何使用该方法,但在我的情况下,现在有8个字段可以成为多少组合我不能把那么多ifs放在那里。
SortedList = list.OrderBy(x =&gt; x.QuantityDelivered).ThenBy(x =&gt; x.Quantity).ToList();
答案 0 :(得分:1)
假设您能够在代码中确定单击了哪个字段进行排序:
IEnumerable<T> items = // code to get initial data,
// set to be an IEnumerable. with default sort applied
List<string> sortFields = // code to get the sort fields into a list,
// in order of selection
bool isFirst = true;
foreach (string sortField in sortFields) {
switch (sortField )
{
case "field1":
if (isFirst) {
items = items.OrderBy(x => x.Field1);
} else {
items = items.ThenBy(x => x.Field1);
}
break;
case "field2":
if (isFirst) {
items = items.OrderBy(x => x.Field2);
} else {
items = items.ThenBy(x => x.Field2);
}
break;
// perform for all fields
}
isFirst = false
}
var listOfItems = items.ToList();
现在,列表按所选字段排序,可以任何您认为合适的方式使用。
将排序字段转换为枚举可能更安全,并且switch
可能更安全,以避免复制字符串时出错。