自定义排序方式,如何让用户选择要排序的字段 列表

本文关键字:排序 字段 列表 用户 方式 自定义 选择 | 更新日期: 2023-09-27 18:33:30

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

现在,如果用户选中其中任何一个,或者检查所有它们,或者让我们说选择它们中的任何一个都没有,我如何相应地对我的列表进行排序?

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

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

任何帮助将不胜感激。

这是我如何使用该方法,但就我而言,现在有 8 个字段,它们可以变成多少种组合,我不能在那里放这么多 if。

排序列表 = 列表。OrderBy(x => x.QuantityDelivered).thenBy(x => x.Quantity)。ToList();

自定义排序方式,如何让用户选择要排序的字段 列表<T>

假设您能够在代码中确定单击哪个字段进行排序:

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