【问题标题】:Custom Sort Extenstion自定义排序扩展
【发布时间】:2021-09-14 22:48:56
【问题描述】:

我正在尝试为如下所示的功能实现自定义排序: 中间名是可选的用户列表(First Middle Last name 组合)。 以下是我对排序的一些标准:

1-first,middle,last

2-first,last,middle

3-last,middle,first

4-last,first,middle

我尝试使用 linq 的 orderby 后跟 then 但它不会那样工作,因为当我获得用户列表时,我正在将用户列表转换为 IEnumerable 并将其传递给视图以将其绑定到下拉列表。 这是我分配给视图模式的最终列表:

 viewModel.Users= users
                     .Select(usr=> new SelectListItem()
                     {
                         Text = $"{usr.FirstName} {usr.MiddleName} {usr.LastName}",
                         Value = $"{usr.FirstName} {usr.MiddleName} {usr.LastName}"
                     }).ToArray();

所以问题是我如何根据上述标准对 IEnumerable 项目进行排序?

我知道这不适用于现有的排序&我需要一些自定义排序方面的帮助,即更多地创建一个能够根据上述标准进行排序的扩展方法。 任何帮助表示赞赏。 谢谢。

【问题讨论】:

  • 我觉得你在问什么有点不清楚。也许是一个实际的示例输入和输出

标签: c# asp.net-mvc-5


【解决方案1】:

据我了解您的问题,您不需要为此进行自定义排序。您可以像这样轻松对 IEnumerable 进行排序。

1-first,middle,last

users.OrderBy(item => item.Firstname).ThenBy(item => item.Midname).ThenBy(item => item.Lastname);

2-first,last,middle

users.OrderBy(item => item.Firstname).ThenBy(item => item.Lastname).ThenBy(item => item.Midname);

3-last,middle,first

users.OrderBy(item => item.Lastname).ThenBy(item => item.Midname).ThenBy(item => item.Firstname);

4-last,first,middle

users.OrderBy(item => item.Lastname).ThenBy(item => item.Firstname).ThenBy(item => item.Midname);

【讨论】:

  • 我认为答案大部分是正确的,但我认为他希望用户能够选择排序,所以我会添加一个开关或一个 if 来允许这样做
  • 感谢您的快速回复。正如我在问题中提到的那样,我确实使用了 linq 的 order & then 来实现这一点,但是我有一点困惑,这可能很愚蠢,但无论如何我还是要问它。如果我将其转换为选择项列表,这种排序将持续存在吗?
  • @user15532895 IEnumerable/IEnumerable 不保证排序。这取决于该接口背后的实现。看this。所以我建议你使用 IEnumerable 的 List insted。如果您将 IEnumerable 转换为 List,您还可以使用带有自定义 IComparer 的 Sort 方法
猜你喜欢
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多