自定义顺序依据,如何让用户选择订购列表<t> </t>的字段

时间:2013-10-01 09:58:42

标签: c# list lambda

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

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

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

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

任何帮助都将不胜感激。

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

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

1 个答案:

答案 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可能更安全,以避免复制字符串时出错。