C# 自定义排序依据,如何让用户选择要在其上排序列表的字段

C# 自定义排序依据,如何让用户选择要在其上排序列表的字段,c#,list,lambda,C#,List,Lambda,我有一个列表,现在我必须向用户显示一个页面,其中对象中的每个字段都显示有一个复选框 现在,如果用户检查了其中的任何一个,或者检查了所有的,或者假设select没有一个,那么我如何相应地对列表进行排序 用户可以从8个字段中选择任意组合,因此列表中的数据应该相应地排序 我目前正在使用列表方法OrderBy 任何帮助都将不胜感激 下面是我如何使用这个方法,但在我的例子中有8个字段,现在有多少个组合可以变成它们,我不能在那里放这么多的if SortedList=list.OrderByx=>x.Quan

我有一个列表,现在我必须向用户显示一个页面,其中对象中的每个字段都显示有一个复选框

现在,如果用户检查了其中的任何一个,或者检查了所有的,或者假设select没有一个,那么我如何相应地对列表进行排序

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

我目前正在使用列表方法OrderBy

任何帮助都将不胜感激

下面是我如何使用这个方法,但在我的例子中有8个字段,现在有多少个组合可以变成它们,我不能在那里放这么多的if


SortedList=list.OrderByx=>x.QuantityDelivered.ThenByx=>x.Quantity.ToList

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

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();
列表现在按所选字段排序,可以以您认为合适的任何方式使用


将排序字段转换为枚举可能更安全,并打开它以避免复制字符串时出错

请分享你的尝试。若你们已经展示了你们的代码,那个么帮助会更容易。仅供参考,OrderBy是IEnumerable的扩展方法,并不是列表的直接部分。我个人会使用自定义的IComparer定义来实现这一点,然后您可以将其与调用列表上的Sort结合起来提供。IComparer界面的实现可以考虑用户选择的字段。我已经添加了我现在正在尝试的代码。嗯+Sriram Sakthivel,对不起!这个问题的答案就在我的头上,我不太明白这一点,而且我在c语言方面没有那么丰富的经验,所以如果可能的话,也许可以从专家那里得到一些简单的解决方案。虽然已经谢谢你了。但是要通过lambda本身然后调用items.OrderByselector是否很难?不要依赖字符串反射?我有8个字段,用户可以从中选择第一个字段和最后一个字段,也可以选择其他字段。你可以继续下去。@Adamhuldsworth和khalid:我切换了逻辑来处理多个选定字段