0

我有一个List<T>,现在我必须向用户显示一个页面,在该页面上,对象内的每个字段都显示有一个复选框。

现在,如果用户检查其中任何一个,或者检查所有这些,或者说选择一个都没有,我如何相应地订购我的列表?

有大约 8 个字段可供用户选择任意组合,因此列表中的数据应相应排序。

我目前正在使用List<>方法OrderBy()

任何帮助,将不胜感激。

这是我如何使用该方法,但在我的情况下,现在有 8 个字段可以变成多少个组合,我不能在那里放这么多 if。

SortedList = list.OrderBy(x => x.QuantityDelivered).ThenBy(x => x.Quantity).ToList();

4

1 回答 1

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以此避免复制字符串时出错。

于 2013-10-01T10:05:48.663 回答